转自:http://www.xuebuyuan.com/1396292.html,http://www.cocoachina.com/bbs/read.php?tid=88589
First!!
源代码里加入:
//判断当前是否为Android平台 #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //定义Jni函数信息结构体 JniMethodInfo minfo; bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/xxx/xxx/xxx","openUrl", "(Ljava/lang/String;)V"); if (isHave) { minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID); } #endif
jni的头文件么找一下include进来就好
这里要注意的就是getStaticMethodInfo这个函数,以下对此函数的介绍转自:http://blog.csdn.net/xiaominghimi/article/details/7602984
此函数有3个参数:
第一参数: minfo ->JniMethodInfo 类型;
第二个参数:类的路径(我搞的是proj.android/src/xx/xxx/xxx...下面那个,还有这个不需要加.java后缀)
第三个参数:方法名(第一参数类中的函数)
第四个参数:(参数)返回类型
关于第二个和第三个参数都比较容易理解,那么第四个参数需要重点介绍一下;例如你在Java中定义一个如下函数 public void helloJni(){};
那么getStaticMethodInfo函数第三个参数你应该传入 “()V” 表示此函数无参无返回值!
如果有这么一个函数: public int helloJni(int _int){return 823};
那么getStaticMethodInfo函数第三个参数你应该传入 “(I)I” 表示此函数需要传入一个int类型的参数并且返回一个int类型!
大概说两个童鞋们应该基本理解了,那么下面详细写一些对照表,留给大家对照;
参数、返回值样式对照表:
注意:最后两项的那个分号也是要加的!!
Second!!
在项目里找到Cocos2dxActivity.java这个东西,如图:
没标出来,反正应该能找到,就在那个org.cocos2dx.lib里。
在里面加一个函数:
//加我 public static void openUrl(String url) { Uri uri = Uri.parse(url); Intent it = new Intent(Intent.ACTION_VIEW,uri); sContext.startActivity(it); }
上面的sContext是在Cocos2dxActivity的onCreate函数里生成后被赋值为了this,不同版本可能叫法不一样,看着改改就好了。
//就是这个函数 protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); sContext = this; this.mHandler = new Cocos2dxHandler(this); this.init(); Cocos2dxHelper.init(this, this); }
其实把openUrl加在自己项目的那个java里也是可以的,把那个sContext改成非private的就行。直接用this的话不行,函数是static的。那函数改成非static行不行呢?最上面那个函数是getStaitcMethodInfo,估计是不行,但我懒得试……
IOS:
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"http://www.baidu.com"]];