cocos2dx通过Jni调用Android的Java层代码(下)
示例代码段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.有参数,无返回值
publicstaticvoid 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.有参数,有返回值
publicstaticint 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类型)
publicstatic 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 代码:
//---- 函数示例之非静态函数调用
//(先获取个对象)
publicstatic Activity actInstance;//定义单例
publicstatic Object rtnActivity() {
return actInstance;
}
//使用此对象进行调用非静态函数
publicvoid nostaticFun() {
Log.e("Himi", "no static Function is OK - By Himi");
}
运行截图:
更多相关文章
- C语言函数的递归(上)
- Android(安卓)Camera Framework层分析
- vold.fstab DirectVolume
- Android培训班(110)start_kernel函数7
- Android(安卓)利用三阶贝塞尔曲线绘制运动轨迹的示例
- Android(安卓)StateMachine和AsyncChannel
- openssl移植android
- Android(安卓)修改默认按键不震动
- 工作笔记-code