cocos2d-x 用浏览器打开网页

时间:2021-09-20 18:19:29

转自:http://www.xuebuyuan.com/1396292.htmlhttp://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类型!

大概说两个童鞋们应该基本理解了,那么下面详细写一些对照表,留给大家对照;

 参数、返回值样式对照表:

cocos2d-x 用浏览器打开网页

注意:最后两项的那个分号也是要加的!!

Second!!

在项目里找到Cocos2dxActivity.java这个东西,如图:

cocos2d-x 用浏览器打开网页

没标出来,反正应该能找到,就在那个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"]];