开发者学堂课程【mPaaS 小程序开发实战 - 教你如何独立运行小程序 :Android 端02:小程序双向通道 -native2tiny】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/741/detail/13128
Android 端02:小程序双向通道 -native2tiny
原生向小程序发送自定义事件
原生向小程序发送自定义事件指的是小程序启动的过程中,native 客户端有一些事件要发送给小程序,小程序接收到客户端的事件,定义一下这个自定义通道。
1. 小程序注册事件
注册示例如下:
1.my.on('nativeToTiny’ , (res)=>{
2.my.showToast({
3.type:’none‘,
4.content:JSON.stringify(res),
5.duration: 3000,
6.success: ()=>{
7.
8.
},
9.fail: ()=>{
10.
11.
},
12.
complete: ()=>{
13.
14.
};
15.
});
16.
})
通过调用 my.on事件名称来注册这个事件,在小程序示例 Demo 中,小程序本身的 app.js 中,在 onLaunch 的时候注册事件 my.on('nativeToTiny’,原生发向小程序方向的通道,接收到参数之后,直接调用 Toast,即 showToast。
2. 客户端发送事件
1.
H5Service h5Service = MPFramework.getExternalService (H5Service.class.getName());
2. final H5Page h5Page = h5Service.getTopH5Page();
3. if (null != h5Page) {
4. JSONObject jo = new JSONObject();
5. jo.put( “key” , value);
6. //native 向小程序发送事件的方法
7. //第一个是事件名称,第二个是参数,第三个默认传 null
8. h5Page.getBridge().sendDataWarpToweb( “nativeToTiny" , jo, null);
9. }
客户端发送事件,通过拿到 H5Service,最上层的 Page,通过 h5Page,也就是一个小程序的页面,拿到Bridge,向它发送 nativeToTiny 这个事件,事件的参数就是 JSONObject jo = new JSONObject();
jo.put( “key” , value);随便写一个就可以,value 就是随便写一个数值,实战演示一下,首先还是用刚才小程序的Demo,当启动小程序的时候,写一个现场,写一个 for 循环,循环5次,每次 sleep 5秒,因为启动时可能会有拉包的加载时间,所以先让它睡5秒,要在主线程里发送事件,value 随便给一个 i,把当前循环次数发送给小程序端,直接让小程序运转起来,最终的样子是打开小程序,每隔5秒向小程序发送一次事件,把当前的事件发送给小程序,小程序拿到信息之后,在小程序的方法里面直接 show 一个 toast。
package com.mpaas.demo;
import ...
publie class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentViewe(R.layout.activity _main) ;
findViewById(R.id.btn).setOnclickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
MPNebula.startApp("2018080616290001");
new Thread( new Runnable(){
@Override
public void run() {
for(int index =0; index<5;index++) {
try {
Thread.sleep(5000);
} catch (InterruptedException e){
e.printStackTrace();
}
final int i = index;
runOnUiThread(new Runnable() {
@Override
public void run(){
H5Service h5Service=MPFramework.getExternalService (H5Service.class.getName());
final H5Page h5Page = h5Service.getTopH5Page():
if (null != h5Page) {
JOSNObject jo = new JS0NObject();
jo.put (“key". i);
//native 向小程序发送事件的方法
//第一个是事件名称,第二个是参数,第三个默认传 null
h5Page.getBridge().sendDataWarpToweb( “nativeToTiny" , jo, null);
}
}
}).start();
}
});
}
}
看一下效果,等5秒钟左右,可以看到“key". value 是1,每隔5秒会发送一个事件过来,处理的方式是展示一个toast,一共会发5次,这个就是 native 客户端向小程序发送信息。
小程序需要监听一些内部事件的时候,可以通过这个通道来处理。