您的位置:首页 > 移动开发 > Cocos引擎

【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)

2012-06-25 17:42 1171 查看
示例代码段2:

Xcode 代码:

//静态函数示例2.有参数,无返回值------------------------------$$$$$$$--------------------------------
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
JniMethodInfo minfo;//定义Jni函数信息结构体
//getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
bool isHave = JniHelper::getStaticMethodInfo(minfo,
"com/ai/ommr/OhMonsterMR4Android", "testFunWithInt","(I)V");

if (!isHave) {
CCLog("jni:此函数不存在");
}else{
CCLog("jni:此函数存在");
//调用此函数
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,823);
}
CCLog("jni-java函数执行完毕");
#endif

Android(Java) 代码:

// 静态函数示例2.有参数,无返回值
public static void testFunWithInt(int _int) {
Log.e("Himi", "静态函数示例1.有参数,无返回值;传入的参数int=" + _int);
}


运行截图:





示例代码段3:

Xcode 代码:

//静态函数示例3.有参数,有返回值--------------------------------$$$$$$$--------------------------------
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
JniMethodInfo minfo;//定义Jni函数信息结构体
//getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数

bool isHave = JniHelper::getStaticMethodInfo(minfo,
"com/ai/ommr/OhMonsterMR4Android","testFunWithIntAndRtn","(I)I");
jint _int ;
if (!isHave) {
CCLog("jni:此函数不存在");
}else{
CCLog("jni:此函数存在");
//调用此函数
_int = minfo.env->CallStaticIntMethod(minfo.classID, minfo.methodID,823);

//尝试jint是否能正常接收返回的int值
JniMethodInfo minfo_ty;
bool isHave = JniHelper::getStaticMethodInfo(minfo_ty, "com/ai/ommr/OhMonsterMR4Android", "testFunWithInt",  "(I)V");
if (isHave) {
minfo_ty.env->CallStaticVoidMethod(minfo_ty.classID, minfo_ty.methodID,_int);
}

}
CCLog("jni-java函数执行完毕");
#endif


Android(Java) 代码:

// 静态函数示例3.有参数,有返回值
public static int testFunWithIntAndRtn(int _int) {
Log.e("Himi", "静态函数示例1.有参数,有返回值;传入的参数int=" + _int);
return _int+1000;
}


运行截图:




示例代码段4:

Xcode 代码:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
JniMethodInfo minfo;//定义Jni函数信息结构体
//getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
bool isHave = JniHelper::getStaticMethodInfo(minfo,  "com/ai/ommr/OhMonsterMR4Android","testFunWithStringAndRtn","(I)Ljava/lang/String;");
jobject jobj;
if (!isHave) {
CCLog("jni:此函数不存在");
}else{
CCLog("jni:此函数存在");
//调用此函数
jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID,823);
}
CCLog("jni-java函数执行完毕");
#endif


Android(Java) 代码:

// 静态函数示例4.有参数,有返回值(String类型)
public static String testFunWithStringAndRtn(int _int) {
Log.e("Himi", "静态函数示例4.有参数,有返回值(String类型);int=" + _int);
return "yes,return 'String' is OK --by Himi";
}


运行截图:




示例代码段5:

Xcode 代码:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
JniMethodInfo minfo;//定义Jni函数信息结构体
//getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
bool isHave = JniHelper::getStaticMethodInfo(minfo,
"com/ai/ommr/OhMonsterMR4Android",  //类的路径
"rtnActivity",   //方法名
"()Ljava/lang/Object;");   //括号里的是参数,后面的是返回值。
jobject jobj;
if (isHave) {
jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
}
CCLog("正确获取到 jobj");

//
isHave = JniHelper::getMethodInfo(minfo,
"com/ai/ommr/OhMonsterMR4Android",  //类的路径
"nostaticFun",   //方法名
"()V");   //括号里的是参数,后面的是返回值。

if (isHave) {
minfo.env->CallVoidMethod(jobj, minfo.methodID);
}
CCLog("jni-java函数执行完毕");
#endif

Java 代码:

//---- 函数示例之非静态函数调用
//(先获取个对象)
public static Activity actInstance;//定义单例
public static Object rtnActivity() {
return actInstance;
}
//使用此对象进行调用非静态函数
public void nostaticFun() {
Log.e("Himi", "no static Function is OK - By Himi");
}


运行截图:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐