@SuppressLint("SetTextI18n")
@Override
public void error(String errorCode, @Nullable String errorMessage, @Nullable Object errorDetails) {
tvContent.setText("测试内容:flutter传递给na数据传递错误");
}
@Override
public void notImplemented() {
}
});
```
// 注册方法,等待被原生通过invokeMethod唤起
Future<dynamic> nativeCallHandler(MethodCall methodCall) async {
switch (methodCall.method) {
case "getFlutterResult":
//获取参数
String paramsFromNative = await methodCall.arguments["invokeKey"];
print("原生android传递过来的参数为------ $paramsFromNative");
return "你好,这个是从flutter回传给NA的数据";
break;
}
}
```
StreamSubscription _streamSubscription;
String _platformMessage;
void _enableEventReceiver() {
_streamSubscription = _channel.receiveBroadcastStream().listen(
(dynamic event) {
print('Received event: $event');
setState(() {
_platformMessage = event;
});
},
onError: (dynamic error) {
print('Received error: ${error.message}');
},
cancelOnError: true);
}
void _disableEventReceiver() {
if (_streamSubscription != null) {
_streamSubscription.cancel();
_streamSubscription = null;
}
}
@override
initState() {
super.initState();
_enableEventReceiver();
}
@override
void dispose() {
super.dispose();
_disableEventReceiver();
}
```
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
channel = EventChannel(flutterEngine.dartExecutor.binaryMessenger, "com.example.eventchannel/interop")
channel.setStreamHandler(
object : StreamHandler {
override fun onListen(arguments: Any?, events: EventSink) {
eventSink = events
Log.d("Android", "EventChannel onListen called")
Handler().postDelayed({
eventSink?.success("Android")
//eventSink?.endOfStream()
//eventSink?.error("error code", "error message","error details")
}, 500)
}
override fun onCancel(arguments: Any?) {
Log.w("Android", "EventChannel onCancel called")
}
})
}
}
```
String _platformMessage;
void _sendMessage() async {
final String reply = await _channel.send('Hello World form Dart');
print(reply);
}
@override
initState() {
super.initState();
// Receive messages from platform
_channel.setMessageHandler((String message) async {
print('Received message = $message');
setState(() => _platformMessage = message);
return 'Reply from Dart';
});
// Send message to platform
_sendMessage();
}
```
val channel = BasicMessageChannel(
flutterEngine.dartExecutor.binaryMessenger,
"com.ycbjie.android/basic", StringCodec.INSTANCE)
// Receive messages from Dart
channel.setMessageHandler { message, reply ->
Log.d("Android", "Received message = $message")
reply.reply("Reply from Android")
}
// Send message to Dart
Handler().postDelayed({
channel.send("Hello World from Android") { reply ->
Log.d("Android", "$reply")
}
}, 500)
}
}
```
ByteData encodeMessage(T message);
T decodeMessage(ByteData message);
}
```
channel.send(message);
}
```
- StandardMessageCodec
- 默认的数据编解码,绝大多数的情况下使用默认的就可以了。比如:MethodChannel,EventChannel
@SuppressLint("SetTextI18n")
@Override
public void error(String errorCode, @Nullable String errorMessage, @Nullable Object errorDetails) {
Log.i("测试数据异常:",errorMessage);
}
@Override
public void notImplemented() {
}
});
}
}
}
```
// 注册方法,等待被原生通过invokeMethod唤起
Future<dynamic> nativeCallHandler(MethodCall methodCall) async {
switch (methodCall.method) {
case "setNum":
//获取参数
int message = await methodCall.arguments;
print("原生android传递过来的参数为------ $message");
return "flutter回调数据:${message.toString()}";
break;
}
}
```
2021-08-26 12:07:09.272 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 131
2021-08-26 12:07:09.273 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:131
2021-08-26 12:07:09.273 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 132
2021-08-26 12:07:09.273 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:132
2021-08-26 12:07:09.273 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 133
2021-08-26 12:07:09.273 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:133
2021-08-26 12:07:09.273 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 134
2021-08-26 12:07:09.273 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:134
2021-08-26 12:07:09.273 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 135
2021-08-26 12:07:09.274 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:135
2021-08-26 12:07:09.274 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 136
2021-08-26 12:07:09.274 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:136
2021-08-26 12:07:09.274 24237-24990/com.ycbjie.ychybrid I/flutter: 测试数据,flutter接收NA数据: 137
2021-08-26 12:07:09.274 24237-24237/com.ycbjie.ychybrid I/测试数据,NA接收flutter回调:: flutter回调数据:137
```
//na,注意na接收到flutter指令后,na是调用startActivityForResult操作跳转到na的新页面
nativeChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(@NonNull MethodCall methodCall, @NonNull MethodChannel.Result result) {
if ("doubi".equals(methodCall.method)) {
//接收来自flutter的指令
//跳转到指定Activity
Intent intent = new Intent(MethodChannelActivity.this, MethodResultActivity.class);
startActivityForResult(intent,RESULT_OK2);
//返回给flutter的参数
result.success("Na收到指令");
}
}
});
```
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_android);
TextView tv = findViewById(R.id.tv);
tv.setText("flutter页面打开NA页面,测试Android原生页面返回Flutter页面");
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("message", "我从原生页面回来了");
setResult(RESULT_OK2, intent);
finish();
}
});
}
}
// na flutter承载容器的na的原生页面
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null && resultCode==RESULT_OK2) {
// MethodResultActivity返回的数据
String message = data.getStringExtra("message");
Map<String, Object> result = new HashMap<>();
result.put("message", message);
// 调用Flutter端定义的方法
nativeChannel.invokeMethod("onActivityResult", result, new MethodChannel.Result() {
@SuppressLint("SetTextI18n")
@Override
public void success(@Nullable Object result) {
tvContent.setText("测试内容2:"+result);
}
@SuppressLint("SetTextI18n")
@Override
public void error(String errorCode, @Nullable String errorMessage, @Nullable Object errorDetails) {
tvContent.setText("测试内容:flutter传递给na数据传递错误2");
}
@Override
public void notImplemented() {
}
});
}
}
//flutter
Future<dynamic> handler(MethodCall call) async {
switch (call.method) {
case 'onActivityResult':
// 获取原生页面传递的参数
print(call.arguments['message']);
return "你好,这个是从flutter传递过来的数据";
}
}
flutterChannel.setMethodCallHandler(handler);
```
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。