轉自: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"]];