cocos creator,Android Studio,相互调用
本文主要纪录:Cocos Creator 使用TypeScript语言开发打包Android的过程中。
Typescript和Java语言的相互调用。
最新的官方文档中 https://docs.cocos.com/creator/3.8/manual/zh/advanced-topics/js-java-bridge.html 。使用 JsbBridge 实现 JavaScript 与 Java 通信
其中用到两个函数:
Java中调用TypeScript 使用 JsbBridge.sendToScript(args0,arg1); 其中 args0 用于区分Typescript接收到后该使用哪个方法去处理。args1 是 Java层要传递给Typescript的参数。
TypeScript调用Java层 使用 native.bridge.sendToNative(arg0,arg1); 其中args0 是Java层接收到的第一个参数。根据该参数识别 调用按个方法。args1 为typescript传递给jaba层的参数。
想要使用该方法需要添加注册
在Java层的注册:
JsbBridge.setCallback((arg0, arg1) -> {
Log.i("scriptcallBack", arg0);
if (arg0.equals("login")){
login();
}else if(arg0.equals("logout") ){
logout();
}else if(arg0.equals("pay")){
pay(arg1);
}else if(arg0.equals("verify")){
verify();
}else if(arg0.equals("center")){
center();
}else if(arg0.equals("exit")){
exit();
}else if(arg0.equals("createrole")){
createrole(arg1);
}else if(arg0.equals("levelup")){
levelup(arg1);
}else if(arg0.equals("entergame")){
entergame(arg1);
}else if(arg0.equals("reportevent")){
reportevent(arg1);
}else if(arg0.equals("chkPermission")){
requestPermission();
}else if(arg0.equals("userAgreement")){
//用户协议
userAgreement();
}else if(arg0.equals("privacyAgreement")){
//隐私协议
privacyAgreement();
}else if(arg0.equals("showRewardAdVideo")){
//展示广告
this.showRewardAdVideo(arg1);
}else if(arg0.equals("loadRewardVideoAd")){
this.loadRewardVideoAd(arg1);
}
});
}
该方法在Appactivity的OnCreate() 方法中添加
public static registerNativeCallBack(){
console.log("注册底层native方法的监听========");
native.bridge.onNative = (arg0:string,arg1:string):void=>{
console.log("底层出来的方法" + arg0 );
console.log(arg1);
if(arg0 == "login"){
this.onLoginCallBack(arg1);
}else if(arg0 == "logout"){
this.onLogoutCallBack();
}else if(arg0 == "pay"){
this.onPayCallBack(arg1);
}else if(arg0 == "verify"){
this.onVerify(arg1);
}else if(arg0 == "center"){
this.onCenter(arg1);
}else if(arg0 == "exit"){
this.onExit(arg1);
}else if(arg0 == "createrole"){
this.onCreaterole(arg1);
}else if(arg0 == "levelup"){
this.onLevelup(arg1);
}else if(arg0 == "entergame"){
this.onEntergame(arg1);
}else if(arg0 == "reportevent"){
this.onReportevent(arg1);
}else if(arg0 == "permission"){
//sdk初始化了。可以执行登录操作了
console.log("有权限了====可以执行登录了")
this.isPermission = true;
EventMgr.getInstance().dispatchEvent(menofvalar.ON_ANDROID_PERMISSION);
}else if(arg0 == "showRewardAdVideo"){
if(arg1 == "show"){
console.log("广告开始展示");
}else if(arg1 == "close"){
console.log("广告关闭")
}else if(arg1 == "ok"){
console.log("广告播放完成");
}else if(arg1 == "err"){
console.log("广告播放错误");
}
}
}
}
该方法在Typescript中调用。进行注册。
以上两个方法很类似。
从以上两个方法来看。arg1参数只能是String类型。
发送参数的时候,需要将需要发送的参数,进行Json序列化。发送为字符串
接收到参数后,进行反序列化操作。
以上主要基于sdk的接入。
需要注意的是:款线程操作的崩溃问题
如果在TypeScript中通知java,而java层执行的操作,操作了ui的话。那么需要使用
runOnUiThread(new Runnable() {
@Override
public void run() {}
}
该方法会避免崩溃,因为他们的操作可能不在一个线程
在java转给你调用TypeScipt中的方法:如果需要操作UI。则需要这么调用。放置渲染线程和当前不在同一个线程。
CocosHelper.runOnGameThread(new Runnable() {
@Override
public void run() {
JsbBridge.sendToScript("permission");
}
});
2024-07-23 19:25:37
user 阅读(127) 评论(0)
标签:cocos creator,Android Studio,Java和Typescript之间的相互调用
分类:cocos creator
很赞哦! (0)