cocos2d-x调用android内嵌浏览器打开网页
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);
- }
2. 改动“cocos2dx\platform\android”下的CCApplication.h和CCApplication.cpp,加入函数
- void CCApplication::openURL(const char* pszUrl)
- {
- JniMethodInfo minfo;
- if(JniHelper::getStaticMethodInfo(minfo,
- "org/cocos2dx/application/ApplicationDemo",
- "openURL",
- "(Ljava/lang/String;)V"))
- {
- jstring StringArg1 = minfo.env->NewStringUTF(pszUrl);
- minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, StringArg1);
- minfo.env->DeleteLocalRef(StringArg1);
- minfo.env->DeleteLocalRef(minfo.classID);
- }
- }
3.在src\org\cocos2dx\lib”下的Cocos2dxActivity.java。加入例如以下语句:
- private static Activity me = null;
- protected void onCreate(final Bundle savedInstanceState) {
- ...
- me = this;
- ...
- }
- //返回Cocos2dxActivity对象,用于调用函数
- public static
Cocos2dxActivity getInstance() {
- return
me; - }
- public void openURL(String url)
- {
- Intent i = new Intent(Intent.ACTION_VIEW);
- i.setData(Uri.parse(url));
- me.startActivity(i);
- }
如今就能够在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内嵌浏览器打开网页的更多相关文章
- 调用Android自带浏览器打开网页
转载请注明出处: http://blog.csdn.net/lowprofile_coding/article/details/77928608 在Android中可以调用自带的浏览器,或者指定一个浏 ...
- 微信内嵌浏览器打开手机浏览器下载APP(APK)的方法
想必大家会经常碰到网页链接在微信内无法打开和微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1.网页链接被举报次数 ...
- Atitit java集成内嵌浏览器与外嵌浏览器attilax总结
Atitit java集成内嵌浏览器与外嵌浏览器attilax总结 HTML5将颠覆原生App世界.这听起来有点危言耸听,但若认真分析HTML5的发展史,你会发现,这个世界的发展趋势确实就是这样. 熟 ...
- 微信内嵌浏览器sessionid丢失问题,nginx ip_hash将所有请求转发到一台机器
现象微信中打开网页,图形验证码填写后,经常提示错误,即使填写正确也会提示错误,并且是间歇性出现. 系统前期,用户使用主要集中在pc浏览器中,一直没有出现这样的问题.近期有部分用户是在微信中访问的,才出 ...
- 【整理总结】代码沉淀 - CefSharp - 比较流行的第三方内嵌浏览器组件
.NET (WPF and Windows Forms) bindings for the Chromium Embedded Framework web: https://github.com/ce ...
- Java实现内嵌浏览器
创建项目 ----> 导入需要的jar ----> 代码实现 需要的jar: https://pan.baidu.com/s/1MEZ1S0LnKSMGQm24QWgmCw 代码: ...
- ABAP中使用浏览器打开网页
在SAP ABAP中可以在Screen中嵌入Html control打开网页,也可以通过调用本地的IE浏览器打开. 1.在Screen中嵌入Html control的例子,在系统中有,se38:SAP ...
- 【317】python 指定浏览器打开网页 / 文件
一.python 打开浏览器的方法: 1. startfile方法(打开指定浏览器) import os os.startfile("C:\Program Files\internet ex ...
- 手机端用swiper组件 轮播图设置后右侧出现空白 及 部分手机浏览器打开网页空白
我的方法是设置内容css overflow:hidden;width:100%; ok. 之前搜到一个方法也可以,就是设置css height: auto;overflow-y: scroll; 但是 ...
随机推荐
- 【水】ZYH记
我从十二岁起,便在sdoj的蒟蒻餐厅里当伙计,root说,样子太傻,怕侍候不了专职切题,就在外面做点事罢.外面的调试管理,虽然容易说话,但唠唠叨叨缠夹不清的也很不少.他们往往要亲眼看着一个字一个字编译 ...
- 【JavaScript】关于 eval()执行JavaScript语句的一次实验测试
实验主题: eval() 函数可以计算某个字符串,并执行其中的 JavaScript 代码.该函数只接受原始字符串作为参数,如果 string 不是原始字符串,那么该方法将不作任何的改变的返回.因此请 ...
- R语言采坑系列——Warning message: In validDetails.polygon(x) : 强制改变过程中产生了NA
用ggplot2的geom_density_2d时,总是不能填充图案,并报错: Warning message: In validDetails.polygon(x) : 强制改变过程中产生了NA 解 ...
- [python 测试框架学习篇] 分享 uiautomator测试框架
uiautomator测试框架 :https://testerhome.com/topics/4194
- AtCoder Regular Contest 083
C - Sugar Water Time limit : 3sec / Memory limit : 256MB Score : 300 points Problem Statement Snuke ...
- NOI2017 [NOI2017]游戏 【2-sat】
题目 题目背景 狂野飙车是小 L 最喜欢的游戏.与其他业余玩家不同的是,小 L 在玩游戏之余,还精于研究游戏的设计,因此他有着与众不同的游戏策略. 题目描述 小 L 计划进行nn 场游戏,每场游戏使用 ...
- 关于sql语句实现将'1,2,3'转1,2,3等竖横转换问题
这是本人的第一个博客,以后会及时整理遇到的问题,方便和大家进行交流. 第一次也不知道说什么了,直接进入正题吧. 因为我的数据在设计时候数据源是竖列存的,满足条件的数据是横列存的.如下图所示: 我要筛选 ...
- linux监控平台搭建-cpu
linux监控平台搭建-cpu 目前服务器的主流CPU是intel或者AMD.到底主频是什么.多核.多线程.并发.并行.超频.一级缓存.二级缓存.三级缓存.i386.x86 cpu:含有算术逻辑.控制 ...
- Docker 组件如何协作?
还记得我们运行的第一个容器吗?现在通过它来体会一下 Docker 各个组件是如何协作的. 容器启动过程如下: Docker 客户端执行 docker run 命令. Docker daemon 发现本 ...
- 【NOIP2016练习】T2 旅行(树形DP,换根)
题意:小C上周末和他可爱的同学小A一起去X湖玩. X湖景区一共有n个景点,这些景点由n-1条观光道连接着,从每个景点开始都可以通过观光道直接或间接地走到其他所有的景点.小C带着小A从1号景点开始游玩. ...