Flutter 与 Android原生 相互通信:BasicMessageChannel、MethodChannel、EventChannel
warning:
这篇文章距离上次修改已过190天,其中的内容可能已经有所变动。
在Flutter与Android原生之间进行通信时,可以使用以下三种方式:
- BasicMessageChannel:用于传递字符串和预定义的各种格式的数据。
- MethodChannel:用于传递方法调用(类似于API调用)。
- EventChannel:用于数据流的通信,可以是单向或双向的。
以下是每种通信方式的简单示例:
BasicMessageChannel
Flutter端:
final channel = BasicMessageChannel<String>('channelName', StringCodec());
String response = await channel.send(message);
Android端:
import io.flutter.plugin.common.BasicMessageChannel;
import io.flutter.plugin.common.StringCodec;
BasicMessageChannel<String> channel = new BasicMessageChannel<>(flutterView, "channelName", StringCodec.INSTANCE);
channel.setMessageHandler((message, reply) -> {
// 处理接收到的消息
String response = processMessage(message);
// 发送回复
reply.reply(response);
});
MethodChannel
Flutter端:
final channel = MethodChannel('channelName');
String result = await channel.invokeMethod('methodName', argument);
Android端:
import io.flutter.plugin.common.MethodChannel;
new MethodChannel(flutterView, "channelName").setMethodCallHandler(
(call, result) -> {
// 处理方法调用
if (call.method.equals("methodName")) {
Object response = processMethodCall(call.arguments);
result.success(response);
} else {
result.notImplemented();
}
}
);
EventChannel
Flutter端:
final channel = EventChannel('channelName');
Stream<dynamic> stream = channel.receiveBroadcastStream();
stream.listen((event) {
// 处理接收到的事件
});
Android端:
import io.flutter.plugin.common.EventChannel;
new EventChannel(flutterView, "channelName").setStreamHandler(
(arguments, events) -> {
// 设置事件处理器
events.onListen((o) -> {
// 开始监听事件
startListening(o);
}, (o) -> {
// 取消监听事件
});
}
);
在实际应用中,你需要替换上述代码中的channelName
、methodName
、argument
和processMessage
/processMethodCall
函数以满足你的具体需求。这些例子展示了如何在Flutter和Android原生之间发送和接收数据、调用方法和接收事件。
评论已关闭