android与白鹭交互,Egret引擎与Android端的交互----小白教程(含坑)

0818b9ca8b590ca3270a3433284dd417.png只要把Egret里面的工程html5Demo的文件夹拖动到批处理文件中,就会自动生成一个对应的android工程,免去敲打命令的烦恼。主要有两个文件:1.配置文件:properties.ini 2.批处理命令.bat配置文件内容:############android工程名称############

android_proj_name=Fish_Native_2

############android工程模板############

#1 D:\Html5ToAndroid\egret-android-support-3.0.0

#2 D:\Egret\egret-android-support-2.5.6

android_model=D:\Html5ToAndroid\egret-android-support-3.0.0批处理命令内容:@echo off

setlocal enabledelayedexpansion

for /f "delims=" %%a in ('type "properties.ini"^| find /i "="') do (

set %%a

)

cd /d "%~dp0"

@set H5_path=%1

@set Android_path=%cd%\%android_proj_name%

@echo H5工程地址 = %H5_path%

@echo 生成的android工程地址 = %Android_path%

@echo 用于生成android工程的模板 = %android_model%

@echo ----------------生成android工程-----------------------

@call egret create_app %Android_path% -f %H5_path% -t %android_model%

pause 第三步:编写Egret端代码,监听Native发送来信息和向Native端发送信息。在main.ts的createGameScene方法界面加入如下代码:this.setNativeListener();//监听android发来的信息

this.callAndroid();//调用android然后分别实现这两个方法:private callAndroid():void{

egret.ExternalInterface.call("callAndroid","i am from Egret");

}

private setNativeListener(): void{

egret.ExternalInterface.addCallback("sendToJS",function(message:string){

console.log("message from Native is = "+message);

//注意 如果再在这里调用main.ts的其他方法的话 使用this.调用的话会报错

this.showMessage(message);//编译不报错 但运行报错

});

}

private showMessage(message:string):void{

console.log("showMessage----- message= " + message);

}

这里面引发了第一个坑,this.的引用。为了应对这个坑,可以使用另一种方式实现callback方法。private setNativeListener(): void{

egret.ExternalInterface.addCallback("sendToJS",this.sendToJScallback);

}

private sendToJScallback(message: string){

console.log("message from Native is = " + message);

this.showMessage(message);//这里可以使用this.引用 调用其他方法。

}

private showMessage(message:string):void{

console.log("showMessage----- message= " + message);

}

这里包含了js中this的引用机制,虽然不是很了解,也不知道这样做法是否正确,反正可以正常运行就ok了,我们只是用来测试的。第四步:把Egret工程生成Android工程。在Eclipse中导入工程,并且在主activity中先设置监听。并再接收到Egret端发送过来的信息后,向Egret发出信息。private void setInterfaces() {

// Egret(TypeScript)-Runtime(Java)通讯

// setRuntimeInterface(String name, IRuntimeInterface interface) 用于设置一个runtime的目标接口

// callEgretInterface(String name, String message) 用于调用Egret的接口,并传递消息

gameEngine.setRuntimeInterface("sendToNative", new IRuntimeInterface() {

@Override

public void callback(String message) {

Log.d(TAG, message);

gameEngine.callEgretInterface("sendToJS", "A message from android");

}

});

}第五步:运行这个android工程,查看log.经过以上步骤,我们已经熟悉如何在Egret端与Native端进行消息通讯了,那么如何定义他们之间的协议。由其方法我们可以知道,他们的消息只允许发送一个string的字符串。那么最好就使用json协议来定义了,方便两边进行数据解析,可是android端可以使用很多json帮助类,但Egret端呢?如何将一个实体生成Json字符串和解析一个字符串变成一个实体类呢。其实可以在Egret的WebSocket章节看到,Egret中包含一个关键词:JSON.这个JSON关键词中包含两个非常有用的方法:0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值