之前看到的帖子都是通过js interface实现H5和原生之间的通信,但是根据官网文档,google官方并不推荐这样做,在Android 6或以上的设备上,推荐使用HTML message channels替代。
实现通讯关键的类是WebMessagePort
, 截取一部分文档上对这个类的描述:
The Java representation of the HTML5 message ports
它其实是一个消息通道(Message Channel)端口,而且是成对出现的。通过port1发送消息,由port2接收; 或者port2发送消息,port1接收。代码里通过WebView创建WebMessagePort对,其中一个为其注册WebMessageCallback
作为接收H5消息的端口,另一个则交给H5端为其绑定onmessage事件就可以接收来自原生的消息。
附上 demo