cocos2d-x调用android内嵌浏览器打开网页,能够从入口传入网址,C++调用android 的api就可以实现。

方法也非常easy

1. 改动“cocos2dx\platform\win32”下的CCApplication.h和CCApplication.cpp。加入函数

头文件声明

void openURL(const char* pszUrl);

cpp文件实现:

void CCApplication::openURL(const char* pszUrl)

{

ShellExecuteA(NULL, "open", pszUrl, NULL, NULL, SW_SHOWNORMAL);

  1. }

2. 改动“cocos2dx\platform\android”下的CCApplication.h和CCApplication.cpp,加入函数

  1. void CCApplication::openURL(const char* pszUrl)
  2. {
  3. JniMethodInfo minfo;
  4. if(JniHelper::getStaticMethodInfo(minfo,
  5. "org/cocos2dx/application/ApplicationDemo",
  6. "openURL",
  7. "(Ljava/lang/String;)V"))
  8. {
  9. jstring StringArg1 = minfo.env->NewStringUTF(pszUrl);
  10. minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, StringArg1);
  11. minfo.env->DeleteLocalRef(StringArg1);
  12. minfo.env->DeleteLocalRef(minfo.classID);
  13. }
  14. }

3.在src\org\cocos2dx\lib”下的Cocos2dxActivity.java。加入例如以下语句:

  1. private static Activity me = null;
  1. protected void onCreate(final Bundle savedInstanceState) {
  2. ...
  3. me = this;
  4. ...
  5. }
  6. //返回Cocos2dxActivity对象,用于调用函数
  1. public static

    Cocos2dxActivity getInstance() {

  2. return
    me;
  3. }
  4. public void openURL(String url)
  5. {
  6. Intent i = new Intent(Intent.ACTION_VIEW);
  7. i.setData(Uri.parse(url));
  8. me.startActivity(i);
  9. }

如今就能够在cocos2d-x调用了

首先,C++要调用java代码。cocos2d-x要调用android的api必须使用到jni库

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include <jni.h>

#include "platform/android/jni/JniHelper.h"

#endif

如今在须要调用的地方:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
JniMethodInfo minfo;
//getStaticMethodInfo。推断Java静态函数是否存在。而且把信息保存到minfo里
//參数1:JniMethodInfo
//參数2:这个类的路径+类名
//參数3:Java函数名称
//參数4:函数參数类型和返回值类型
//返回一个bool,是否找到该函数
bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/yipingtai/org/Webopen","getInstance","()Lcom/yipingtai/org/Webopen;");
jobject jobj;//存对象
if (isHave) {
//这里的调用静态的getInstance,返回web类的对象。 jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
isHave = JniHelper::getMethodInfo(minfo,"com/yipingtai/org/Webopen","openWebview","(Ljava/lang/String;)V");
if (isHave) {
jstring url = minfo.env->NewStringUTF("http://www.baidu.com");
//调用 openWebview, 參数1:Test对象 參数2:方法ID 參数3:參数
(没有參数就不写了)
			minfo.env->CallVoidMethod(jobj, minfo.methodID, url);
		}
}
#else
CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
#endif

这里用到jni类型签名,简介一下

签名-类型 : Z:bool   B:byte   C:char   S:short   I:int   J:long   F:float   D:double  L:全限定类名   [:数组

类的签名规则是:“L+全限定类名+;” 三部分组成,当中全限定类名以”/”分隔。而不是用“.”或者“_”分隔。

比如java方法:long fun (int n, String str, int[] arr); 

签名为:(ILjava/lang/String;[I)J   括号中面的内容分成三部分,之间没有空格,即“I”、“Ljava/lang/String。”和“[I”,分别代表 int、String和int[]。

括号外面是返回值类型签名,J代表long型。

想深入了解,能够百度一下JNI方法签名规则

cocos2d-x调用android内嵌浏览器打开网页的更多相关文章

  1. 调用Android自带浏览器打开网页

    转载请注明出处: http://blog.csdn.net/lowprofile_coding/article/details/77928608 在Android中可以调用自带的浏览器,或者指定一个浏 ...

  2. 微信内嵌浏览器打开手机浏览器下载APP(APK)的方法

    想必大家会经常碰到网页链接在微信内无法打开和微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1.网页链接被举报次数 ...

  3. Atitit java集成内嵌浏览器与外嵌浏览器attilax总结

    Atitit java集成内嵌浏览器与外嵌浏览器attilax总结 HTML5将颠覆原生App世界.这听起来有点危言耸听,但若认真分析HTML5的发展史,你会发现,这个世界的发展趋势确实就是这样. 熟 ...

  4. 微信内嵌浏览器sessionid丢失问题,nginx ip_hash将所有请求转发到一台机器

    现象微信中打开网页,图形验证码填写后,经常提示错误,即使填写正确也会提示错误,并且是间歇性出现. 系统前期,用户使用主要集中在pc浏览器中,一直没有出现这样的问题.近期有部分用户是在微信中访问的,才出 ...

  5. 【整理总结】代码沉淀 - CefSharp - 比较流行的第三方内嵌浏览器组件

    .NET (WPF and Windows Forms) bindings for the Chromium Embedded Framework web: https://github.com/ce ...

  6. Java实现内嵌浏览器

    创建项目 ---->   导入需要的jar ---->  代码实现 需要的jar: https://pan.baidu.com/s/1MEZ1S0LnKSMGQm24QWgmCw 代码: ...

  7. ABAP中使用浏览器打开网页

    在SAP ABAP中可以在Screen中嵌入Html control打开网页,也可以通过调用本地的IE浏览器打开. 1.在Screen中嵌入Html control的例子,在系统中有,se38:SAP ...

  8. 【317】python 指定浏览器打开网页 / 文件

    一.python 打开浏览器的方法: 1. startfile方法(打开指定浏览器) import os os.startfile("C:\Program Files\internet ex ...

  9. 手机端用swiper组件 轮播图设置后右侧出现空白 及 部分手机浏览器打开网页空白

    我的方法是设置内容css overflow:hidden;width:100%; ok. 之前搜到一个方法也可以,就是设置css height: auto;overflow-y: scroll; 但是 ...

随机推荐

  1. mysql primary partition分区

    尝试把数据库一个表分区 ALTER TABLE user PARTITION BY RANGE(TO_DAYS(`date`)) ( PARTITION p1004 VALUES LESS THAN  ...

  2. python - 字符串的内建函数

    # -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: study_3_str_内建函数.py@ide: PyCharm Commu ...

  3. Jmeter生成8位不重复的随机数

    jmeter的time函数${__time(,)}  :  默认该公式精确到毫秒级别, 13位数 ${__time(/1000,)}  : 该公式精确到秒级别, 10位数 ${__time(yyyy- ...

  4. 【水】ZYH记

    我从十二岁起,便在sdoj的蒟蒻餐厅里当伙计,root说,样子太傻,怕侍候不了专职切题,就在外面做点事罢.外面的调试管理,虽然容易说话,但唠唠叨叨缠夹不清的也很不少.他们往往要亲眼看着一个字一个字编译 ...

  5. AtCoder Grand Contest 021

    A - Digit Sum 2 Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement Find t ...

  6. 【bzoj4247】挂饰 背包dp

    题目描述 JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直接挂在手机上, ...

  7. CSS3box-shadow属性的使用

    每次使用box-shadow,都要查阅资料才能实现对应的效果,现在总结一下,方便以后查看. 一.语法: E {box-shadow: inset x-offset y-offset blur-radi ...

  8. Caused by: java.io.FileNotFoundException: class path resource

    异常: java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.c ...

  9. 用Vue创建一个新的项目

    vue的安装 Vue.js不支持IE8及以下版本.因为Vue.js使用了ECMAScript5特性,IE8显然不能模拟.Vue.js支持所有兼容ECMAScript5的浏览器. 在用Vue.js构建大 ...

  10. Promise简单实现--摘抄

    Promise 看了些promise的介绍,还是感觉不够深入,这个在解决异步问题上是一个很好的解决方案,所以详细看一下,顺便按照自己的思路实现一个简单的Promise. Promise/A+规范: 首 ...