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

Flutter与Android通信方式->EventChannel方式(单项通信,不返回结果)

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

摘要: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'); @override void initState() { super.initState(); eventChannel.receiveBroadcastStream().listen(_onEvent, onError: _onError); } 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.EventChannel class FlutterEventPlugin : FlutterPlugin, EventChannel.StreamHandler { private var channelName = "plugins.flutter.io/FlutterEventPlugin"; companion object { private var eventChannel: EventChannel? = null private var eventSink: EventChannel.EventSink? = null private var context: Context? = null fun sendContent(content:String) { eventSink?.success(content); } } override fun onListen(arguments: Any?, events: EventChannel.EventSink?) { eventSink = events } override fun onCancel(arguments: Any?) { eventSink = null } override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { eventChannel = EventChannel(binding.binaryMessenger, channelName) eventChannel!!.setStreamHandler(this) context = binding.applicationContext } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { eventChannel = null eventChannel!!.setStreamHandler(null) } }
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()); GeneratedPluginRegistrant.registerWith(flutterEngine); } }

显示结果:

I/flutter (19362): common_utils e 初始化完成->plugins.flutter.io/FlutterEventPlugin I/flutter (19362): common_utils e result->处理完成 I/flutter (19362): common_utils e Flutter收到Android发来的消息-> Android发送消息到Flutter

 

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

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

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

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

文章评论

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

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章