Flutter混合开发Android通信之EventChannel
得知坦然,失之淡然,争之必然,顺其自然。人生不如意事十之八九,凡事不必太过认真,不要太过强求。一切随缘,顺其自然就好。命里有时终须有,命里无时莫强求。的确,这是一个尔虞我诈,充满竞争的社会,适者生存,不适者淘汰。
前言:
上一章中给大家介绍了Flutter混合开发通信之一的BasicMessageChannel双向通信,本章给大家介绍的是Android单独给Flutter发送消息,可持续发送,Flutter不能给Android发送消息,且无返回值的EventChannel
还是老套路,先来看看今天的效果吧:
效果图(1.1):
分析:
Android端:
- 一个Button,一个Text()
- Text文字上显示使用广播接受者接收当前的电量
Flutter端:
- 接收Android传过来的数据并展示
Android端发送消息
第一步:创建EventChannel
private final EventChannel eventChannelPlugin;
eventChannelPlugin = new EventChannel(messenger, "demo.ht.com.androidproject/EventChannelPlugin");
- 参数一:BinaryMessenger messenger 发送消息工具
- 参数二:String name 消息渠道name唯一标识(和
效果图(1.2)
对应)
效果图(1.2)
第二步,通过setStreamHandler()发送消息
public class EventChannelPlugin implements EventChannel.StreamHandler {
eventChannelPlugin.setStreamHandler(this);
@Override
public void onListen(Object args, EventChannel.EventSink eventSink) {
//要发送消息
eventSink.success(ElectricityQuantity);
}
@Override
public void onCancel(Object o) {
}
}
通过重写方法中的onListen()中的eventSink参数来发送消息
发送消息调用 eventSink.success(“要发送的消息,当前发送的是电量”);
EventChannelPlugin完整代码:
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.EventChannel;
/**
* szj 2020/11/26
* CSDN博客:https://blog.csdn.net/weixin_44819566/
* 微信公众号:码上变有钱
* EventChannelPlugin
* 用于数据流(event streams)的通信,持续通信,通过长用于Native向Dart的通信,
* 如:手机电量变化,网络连接变化,陀螺仪,传感器等;
*/
public class EventChannelPlugin implements EventChannel.StreamHandler {
private final String ElectricityQuantity;
/**
*
* @param messenger 发送消息工具
* @param ElectricityQuantity 当前电量
*/
public static void registerWith(BinaryMessenger messenger, String ElectricityQuantity) {
new EventChannelPlugin(messenger, ElectricityQuantity);
}
private EventChannelPlugin(BinaryMessenger messenger,String ElectricityQuantity) {
this.ElectricityQuantity = ElectricityQuantity;
EventChannel eventChannelPlugin = new EventChannel(messenger, "demo.ht.com.androidproject/EventChannelPlugin");
eventChannelPlugin.setStreamHandler(this);
}
@Override
public void onListen(Object args, EventChannel.EventSink eventSink) {
//要发送消息
eventSink.success(ElectricityQuantity);
}
@Override
public void onCancel(Object o) {
}
}
Android端发送消息注意事项:
在FlutterAppActivity中需要吧getCachedEngineId()方法注释掉,使用EventChannel不能调用这个方法,否则第二步,通过setStreamHandler()发送消息不会执行.导致消息发送不成功,什么是FlutterAppActivity可以查看Flutter混合开发 传递初始化数据给Android(4.2)
走到这里,Android发送消息就完成了
Android获取当前手机电量
代码我是从网上粘的,分享给大家
/**
* 电量监听
*
* 使用:
* IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
* receiver = new BatteryReceiver(textView);
* registerReceiver(receiver, filter);
*/
public class BatteryReceiver extends BroadcastReceiver {
private TextView pow;
public BatteryReceiver(TextView pow) {
this.pow = pow;
}
@Override
public void onReceive(Context context, Intent intent) {
int current = intent.getExtras().getInt("level");// 获得当前电量
int total = intent.getExtras().getInt("scale");// 获得总电量
int percent = current * 100 / total;
pow.setText(percent + "%");
}
}
使用:直接将textView对象传进去即可;
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
receiver = new BatteryReceiver(textView);
registerReceiver(receiver, filter);
Flutter端接收消息
第一步: /// EventChannel接收Android发送来的电量
/// EventChannel接收Android发送来的电量
EventChannel _eventChannelPlugin = EventChannel("demo.ht.com.androidproject/EventChannelPlugin");
和效果图(1.3)
对应
效果图(1.3)
:
第二步:
String _eventMessage; //用来接收EventMes电量
//使用Event来接收电量消息
_eventChannelPlugin.receiveBroadcastStream().listen((event) {
setState(() {
_eventMessage = event;
});
});
这里的event就是Android发送过来的消息了
在来看看效果吧:
猜你喜欢:
FLutter混合开发 Android跳转Flutter页面,Flutter引擎等(4.1)
Flutter混合开发 传递初始化数据给Android(4.2)
Flutter混合开发 BasicMessageChannel与原生android通信(4.3)
Flutter混合开发 MethodChannel单向传递消息(4.5)
Flutter混合开发 如何将Flutter项目变成Module导入Android项目(4.6)
原创不易,您的点赞就是对我最大的支持,留下您的点赞吧~