您现在的位置是:首页 > 文章详情

Flutter与Android通信方式->BasicMessageChannel方式(发送消息并且返回结果)

日期:2020-08-16点击:788

摘要:Flutter版本号:1.12.13,Kotlin版本号:1.3.72 

版本号不同,实现的方式不一样,所以特此标注下。

具体的实现原理,自行查阅。这里只写代码实现过程,主要原因是网上Kotlin的实现方式实在太少,特此记录。

Flutter:

import 'package:base_library/base_library.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class ChannelDemoPage extends StatefulWidget { @override _ChannelDemoPageState createState() => _ChannelDemoPageState(); } class _ChannelDemoPageState extends State<ChannelDemoPage> { static const _channel = const MethodChannel('plugins.flutter.io/FlutterMessagePlugin'); static const eventChannel = EventChannel('plugins.flutter.io/FlutterEventPlugin'); static const _basicMessageChannel = BasicMessageChannel( 'plugins.flutter.io/FlutterBasicMessageChannel', StringCodec()); @override void initState() { super.initState(); eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError); // ignore: missing_return _basicMessageChannel.setMessageHandler((String message) { LogUtil.e("Flutter收到Android发来Basic消息->, $message"); }); } void _onEvent(Object event) { LogUtil.e("Flutter收到Android发来的消息-> " + event.toString()); } void _onError(Object error) { LogUtil.e("错误:" + error.toString()); } @override Widget build(BuildContext context) { return new Scaffold( body: new Row(), floatingActionButtonLocation: FloatingActionButtonLocation.endFloat, floatingActionButton: new FloatingActionButton( backgroundColor: Colors.blueAccent, onPressed: () { this.getResult(); }, child: new Icon(Icons.adb), ), ); } void getResult() async { try { Map<String, Object> map = {"shareUrl": "https://www.baidu.com"}; var result = await _channel.invokeMethod("getRealUrl", map); LogUtil.e("result->$result"); } catch (e) { LogUtil.e("e->, $e"); } } } 

Kotlin:

import android.content.Context import android.util.Log import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.plugin.common.BasicMessageChannel import io.flutter.plugin.common.BasicMessageChannel.MessageHandler import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.PluginRegistry import io.flutter.plugin.common.StringCodec class FlutterBasicMessageChannel : FlutterPlugin, MessageHandler<String> { private var channelName = "plugins.flutter.io/FlutterBasicMessageChannel" private var context: Context? = null companion object { private var basicMessageChannel: BasicMessageChannel<String>? = null fun sendContent(content: String) { basicMessageChannel?.send(content) } } override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { basicMessageChannel = BasicMessageChannel(binding.binaryMessenger, channelName, StringCodec.INSTANCE) basicMessageChannel?.setMessageHandler(this) context = binding.applicationContext } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { basicMessageChannel?.setMessageHandler(null) basicMessageChannel = null; } override fun onMessage(message: String?, reply: BasicMessageChannel.Reply<String>) { Log.i("Android", "Received message = $message") reply.reply("Reply from Android") } }
import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugins.GeneratedPluginRegistrant class MainActivity: FlutterActivity () { override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { flutterEngine.getPlugins().add(FlutterMessagePlugin()); flutterEngine.getPlugins().add(FlutterEventPlugin()); flutterEngine.getPlugins().add(FlutterBasicMessageChannel()); GeneratedPluginRegistrant.registerWith(flutterEngine); } }

显示结果:

I/flutter (19721): common_utils e result->处理完成 I/flutter (19721): common_utils e Flutter收到Android发来的消息-> Android发送消息到Flutter I/flutter (19721): common_utils e Flutter收到Android发来Basic消息->, Android发送Basic消息到Flutter

 

原文链接:https://my.oschina.net/willdas/blog/4497817
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章