flutter端的调用代码
EventChannel _eventChannel=new EventChannel('samples.flutter.io/charging');
Future<void> event(Function(Object data) function)async{
_eventChannel.receiveBroadcastStream().listen((data){
function(data);
print("事件监听=========》"+data.toString());
});
}
android端的代码
第一步,需要一个通道名
private final String CHARGING_CHANNEL = "samples.flutter.io/charging";
第二步,创建监听对象
//事件接受对象
private EventChannel.EventSink eventSink = null;
private EventChannel.StreamHandler streamHandler = new EventChannel.StreamHandler() {
//事件监听
@Override
public void onListen(Object o, EventChannel.EventSink sink) {
eventSink = sink;
//监听手机充电状态
context.registerReceiver(
createChargingStateChangeReceiver(eventSink), new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
//sink.success("测试一下");
}
//取消监听
@Override
public void onCancel(Object o) {
eventSink = null;
}
};
第三步,注册通道--此处代码是写在构造函数中,并不是一定要写在构造函数中,
FlutterPlugin(FlutterActivity activity, MethodChannel channel, Registrar registrar) {
this.activity = activity;
//CHARGING_CHANNEL通道名
EventChannel eventChannel = new EventChannel(registrar.messenger(), CHARGING_CHANNEL);
//设置监听对象
eventChannel.setStreamHandler(streamHandler);
}
监听手机充电状态
private BroadcastReceiver createChargingStateChangeReceiver(final EventChannel.EventSink events) {
return new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
String message = "null";
switch (status) {
case BatteryManager.BATTERY_STATUS_CHARGING:
message = "充电中";
break;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
message = "放电中";
break;
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
message = "未充电";
break;
case BatteryManager.BATTERY_STATUS_FULL:
message = "已充满";
break;
}
events.success(message);
}
};
}