j s与android原生的通信

使用Creater打包的安卓原生应用,可以通过反射机制直接在JavaScript中调用Java的静态方法。使用方法如下:

var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)

className:java的类名

methodName:方法名字

methodSingnature:方法签名

parameters:参数

Cocos Creater中支持的java类型签名有下面4中:

一、Js调用java方法

使用示例一

在org.cocos2dx.javascript.AppActivity.java中定义一下方法

public static String jsCallNative(int value,float value2,boolean value3,String value4) {return value + "--" + value2 + "--" + value3 + "--" + value4;
}

在j s方法中如下处理:

    //调用原生有参数方法,并且参数类型只能时int,float,boolean,StringonParmasBtnClicked() {if(cc.sys.os === cc.sys.OS_ANDROID) {let className = "org/cocos2dx/javascript/AppActivity";let methodName = "jsCallNative";let methodSiglture = "(IFZLjava/lang/String;)Ljava/lang/String;";var result = jsb.reflection.callStaticMethod(className,methodName,methodSiglture,2020,10,false,"this value from js.");// cc.log(result);}else {cc.log("other platform.")}},

另外有一点需要注意,在Android应用中,Cocos引擎的渲染和Js的逻辑是在GL线程中进行的,而Android本身的UI更新是在App的UI线程中进行的,所以Js中调用的Java方法有刷新UI的操作,都需要在UI线程中进行。

示例:

在o rg.cocos2dx.javascript.AppActivity.java中定义一下方法

    public static void jsCallNative() {mApp.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(mApp,"js call android native method",Toast.LENGTH_SHORT).show();}});}

mApp时Activity的引用

public class AppActivity extends Cocos2dxActivity {private static AppActivity mApp = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mApp = this;//....}
}

Js中调用以上方法:

    onClick() {if(cc.sys.os === cc.sys.OS_ANDROID) {let className = "org/cocos2dx/javascript/AppActivity";let methodName = "jsCallNative";let methodSiglture = "()V";//调用原生无参数方法jsb.reflection.callStaticMethod(className,methodName,methodSiglture)} else {cc.log("other platfrom");}},

二、java调用Js方法

在o rg.cocos2dx.javascript.AppActivity.java中定义如下方法。

 public static void showAlertDialog(final String title, final String msg) {mApp.runOnUiThread(new Runnable() {@Overridepublic void run() {AlertDialog dialog = new AlertDialog.Builder(mApp).create();dialog.setTitle(title);dialog.setMessage(msg);dialog.setButton("OK", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {mApp.runOnGLThread(new Runnable() {@Overridepublic void run() {//方法1
//                                Cocos2dxJavascriptJavaBridge.evalString("cc.log(\"Javascript Java bridge!\")");//方法2,安卓原生调用cocosCreater中的 自定义方法Cocos2dxJavascriptJavaBridge.evalString("cc.reveiveNative()");}});}});dialog.show();}});}

在j s中定义相应的方法:

//原生调用js 的方法。
cc.reveiveNative = function() {//TODO功能实现
}

参考文章:

https://docs.cocos.com/creator/manual/zh/advanced-topics/java-reflection.html
https://docs.cocos.com/creator/manual/zh/advanced-topics/oc-reflection.html

CocosCreater js与原生通信相关推荐

  1. Vue.js 父子组件通信的十种方式;告诉世界前端也能做 AI;你可能不知道的14个JavaScript调试技巧...

    记得点击文章末尾的"阅读原文"查看哟~ 下面先一起看下本周的摘要吧~ 想了解老用户如何参与阿里云双十一1折拼团特惠主机的,可以看第二条推送,文中提供了两种方法~,一起看看本周有哪些 ...

  2. Flutter与原生通信

    -- Flutter作为一个跨平台框架,一经问世,便受到众多开发的追捧,发展至今相信已经有很多公司或个人将其加入自己的项目,进行混合开发,那么FLutter如何与原生通信呢? -- 本次就以Andro ...

  3. Hybrid APP 混合开发模式的选择之路(六:JSBridge---Native代码与JS代码的通信桥梁)

    原文出处:http://www.cnblogs.com/dailc/p/5931324.html JSBridge是Native代码与JS代码的通信桥梁.目前的一种统一方案是:H5触发url sche ...

  4. iOS下JS与原生OC互相调用

    iOS开发免不了要与UIWebView打交道,然后就要涉及到JS与原生OC交互,今天总结一下JS与原生OC交互的两种方式. JS调用原生OC篇 方式一 第一种方式是用JS发起一个假的URL请求,然后利 ...

  5. 在js对象上绑定js数组原生方法

    在js对象上绑定js数组原生方法 在js对象上绑定数组方法会给当前对象添加一个lenght:0属性 例: var o = {}; [].pop.call(o) console.log(o)//返回结果 ...

  6. qt百度地图html,Qt的QWebChannel和JS、HTML通信/交互驱动百度地图

    Qt的QWebChannel和JS.HTML通信/交互驱动百度地图 0 前言 我一个研究嵌入式的,不知道怎么就迷上了上位机,接了几个项目都是关于Qt,这个项目还是比较经典的,自己没事儿的时候也进行研究 ...

  7. android 原生调用js,js调用原生

    原生调用js方法,带参数 activityBaseWebAddWebView.loadUrl("javascript:changeColor('" + viewColor + &q ...

  8. vue js 和原生app调用回调方法问题

    vue js 和原生app调用回调方法问题 import Vue from 'vue' export default { name: 'list', components: { }, data: () ...

  9. iOS下JS和原生交互,函数互调

    现在越来越多的APP都是H5和原生混合开发,这样确实方便快捷,但是H5的部分总避免不了很多与原生的交互,原生调JS函数还比较简单,原生的API函数stringByEvaluatingJavaScrip ...

最新文章

  1. selenium + python自动化测试环境搭建
  2. tkinter 10 messagebox 弹窗
  3. 会计记忆总结之七:财产清查
  4. rca接口_音频线怎么区别?几种音频接口逐一介绍
  5. 面试官问我JVM内存结构,我真的是
  6. win8.1 php mysql,win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装
  7. C#带按钮的文本框TextBoxContainButton
  8. js和python交互_JSShell:一个基于python的交互式Shell
  9. vc6可编译的 linux 源码,winpcap+vc6编译环境配置,以及获取网络设备列表的源代码...
  10. VSS 2005 配置简明手册
  11. 2016 Bird Cup ICPC7th@ahstu--“波导杯”安徽科技学院第七届程序设计大赛
  12. scrum开发中测试人员如何工作?
  13. xheditor可视化富文本编辑器
  14. riso1855使用说明_理想CV1855驱动下载 理想CV1855打印机驱动 v20170627 32bit+64bit 免费安装版 下载-脚本之家...
  15. 关于iOS 阴历阳历转化的那些事儿
  16. DC-DC电源市场现状及未来发展趋势分析
  17. 诸如zxing二维码调用摄像头旋转角度问题解决方法
  18. 怎么在线把图片转成PDF?几个步骤轻松转换
  19. 《电商后台系统产品逻辑解析》学习笔记
  20. 构建基于词典的Lucene分析器

热门文章

  1. 机器学习项目的一般流程
  2. IDEA 常用配置与使用
  3. vivoY73s和vivoy53s哪个好
  4. 特征线性可分styleGan(粗中细三层次改变图像特征)生成模型有什么用可以模拟数据的分布进而转化为判别模型
  5. 会计转行数据分析,可行性多高?
  6. 身归鸿蒙是什么意思,白浅:我和夜华身归混沌,锦觅:我和旭凤共赴鸿蒙,她:两位妹妹...
  7. ExtJS 4 组件详解
  8. 512GB 的 iPhone 13 不够用?
  9. 防止浏览器缓存的办法
  10. 刚打开android app时,extends AppCompatActivity出现报错该怎么办?