智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...

导航

cocos2d-x 用浏览器打开网页

Posted on 2014-08-08 22:50  Bill Yuan  阅读(4178)  评论(0编辑  收藏  举报

转自: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类型!

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

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

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

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"]];