cocos2d-x调用android内嵌浏览器打开网页

cocos2d-x调用android内嵌浏览器打开网页,可以从入口传入网址,C++调用android 的api即可实现。方法也很简单

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内嵌浏览器打开网页,布布扣,bubuko.com

时间: 2024-10-11 07:02:14

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

android之在view中内嵌浏览器的方法

我要做的一个东西是在一个页面的中间嵌入浏览器,一开始不知道从哪里开始,因为以前用的都是Textveiw或者editVeiw之类的控件,而它们并不能用来显示网页的内容,怎么办呢? 首先想到的是:是不是有一个用来显示网页的View呢,于是我就在eclipse里xml编辑器里输入<web,哈哈,果然下面有个提示是webVeiw,那么能不能用它呢?于是到网上搜一下它的资料,果然可以的,下面就开始吧. 先在xml里把webview建好,在代码里用findViewById()将其取出来.我的代码是: Web

微信内嵌浏览器如何直接打开外部浏览器下载APP(APK)

想必大家会经常碰到网页链接在微信内无法打开和微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1.网页链接被举报次数过多.2.网页含违规内容,含敏感词.3.被腾讯检测系统判断为诱导分享内容.4.转发分享次数达上限 那么上述问题怎么办呢?只要我们实现微信跳转浏览器的功能即可. 功能目的 生成微信跳转链接,实现微信内置浏览器跳转外部浏览器打开网页. 功能效果 对网页所属的PHP代码进行相关处理,加入跳转接口即可实现.

Jcef内嵌浏览器windows版本的编译及使用

背景 去年年底接到的新需求,需要将原来用Swing做的桌面应用中的一个功能做成Web版的,并且要集成到原应用中,换言之就是要使用内嵌浏览器.最开始考虑的是JavaFx提供的WebView,优点是不需要其他第三方库,jdk1.7开始集成.但是开发完成之后发现两个比较严重的问题,一是界面有一个比较复杂的曲线图会严重卡顿,另一个是有几率会导致虚拟机崩溃,并且速度上也不是很让人满意.最后只能考虑换一个内嵌浏览器框架,然后就找到jcef,基于chrome,速度兼容性都很好. 关于jcef就不多作介绍,不了

调用Android系统安装的软件打开文件,程序停止运行

问题描述 如题,调用Android系统安装的软件打开文件时,当系统有安装相关软件时程序正常运行,但是当系统找不到该文件类型匹配的软件时就停止运行了.现在我想让它找不到相应软件时能提示用户,而不是直接停止运行,代码应该怎么写,求大神赐教!!! 解决方案1 或者捕捉startActivity的异常,但是这种方式比较粗暴. 解决方案2 try {     //把你7楼的代码放在这里 } catch (Exception e) {     //提示用户没有找到 } 解决方案3 何必呢,直接使用 // 获

【微信ticket跳转】手机浏览器网页跳转到微信内置浏览器打开

[微信ticket跳转]手机浏览器网页跳转到微信内置浏览器打开 起始不少人已经关注到了招行的智能客服:http://xyk.cmbchina.com/Latte/wx/20150520wkf?from=ISTA004&clientid= 招行的这个跳转,发现后台返回的这个数据{"returnCode":"0000","returnMessage":"success","url":"weix

微信内分享第三方H5链接无法使用内置浏览器打开的解决方案

很多朋友在微信内想分享转发H5链接的时候都会很容易碰到H5链接在微信内无法打开或在微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1.网页链接被举报次数过多.2.网页含违规内容,含敏感词.3.被腾讯检测系统判断为诱导分享内容.4.转发分享次数达上限 大多数的情况下都是被人举报次数过多导致链接被封,而举报的人群里其实目标用户并没有占很多,多数都是来自同行的恶意举报,这是没有办法的事情.当举报次数达到一定数量时,微

微信内置浏览器打开app下载网页提示已停止访问怎么办?哪些api接口可以恢复访问

微信内置浏览器打开app下载网页提示已停止访问怎么办?哪些api接口可以恢复网页正常访问? 现如今微信对第三方app下载链接的拦截是越来越严格了,下载链接在微信中分享转发经常会被拦截,一旦被拦截用户就只能复制链接手动打开浏览器粘贴才能访问,如此给用户带来的体验台差,用户量无法有效地累积起来,从而导致推广成本一直在增加,推广效率却无法有明显的提升. 所以针对这个问题,特写这篇文章分享哪些api接口可以免费实现微信内自动跳转浏览器下载app的功能. Mindjump-API接口平台 366API-接

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::getStaticMethodI

Android内嵌网页webview点击其中的链接跳转到我们应用内的Activity

在一个大的Android项目中,由于客户端来不及更新和实现,经常会内嵌一些网页(在一些大型的互联网公司,PC的产品总是跑在客户端的前面),比如活动页面,通常可以内嵌用html5实现的页面,可以适配手机.但是这些网页中有好多链接,但是这些链接有些内容有是我们客户端已经实现的,比如有一个注册链接,其实客户端也实现了注册功能,我们不想再继续跳转到网页注册,而是打开客户端某个注册Activity,可以通过以下方式来实现: xml 文件,如下: java代码如下: ? 1 2 3 4 5 6 7 8 9