Flutter混合开发 EventChannel单向传递数据(4.4)

得知坦然,失之淡然,争之必然,顺其自然。人生不如意事十之八九,凡事不必太过认真,不要太过强求。一切随缘,顺其自然就好。命里有时终须有,命里无时莫强求。的确,这是一个尔虞我诈,充满竞争的社会,适者生存,不适者淘汰。

前言:
上一章中给大家介绍了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)

原创不易,您的点赞就是对我最大的支持,留下您的点赞吧~

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

s10g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值