首页 > 代码库 > cocos2d-x 用浏览器打开网页

cocos2d-x 用浏览器打开网页

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