Flutter与Android通信方式->MethodChannel方式(发送消息并且返回结果)
摘要: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'); @override void initState() { super.initState(); } @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.* import io.flutter.plugin.common.MethodChannel.MethodCallHandler import io.flutter.plugin.common.MethodChannel.Result class FlutterMessagePlugin : FlutterPlugin, MethodCallHandler { private var channel: MethodChannel? = null private var context: Context? = null override fun onMethodCall(call: MethodCall, result: Result) { if (call.method == "getRealUrl") { var shareUrl = call.argument<String>("shareUrl"); Log.v("shareUrl=", shareUrl) result.success("处理完成") } else { result.notImplemented() } } companion object { var channelName = "plugins.flutter.io/FlutterMessagePlugin"; fun registerWith(registry: PluginRegistry.Registrar) { var flutterPlugin = FlutterMessagePlugin(); flutterPlugin.channel = MethodChannel(registry.messenger(), channelName); flutterPlugin.context = registry.context(); flutterPlugin.channel?.setMethodCallHandler(flutterPlugin); } } override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) { channel = MethodChannel(binding.binaryMessenger, channelName) context = binding.applicationContext channel!!.setMethodCallHandler(this) } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { channel?.setMethodCallHandler(null) channel = 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()); GeneratedPluginRegistrant.registerWith(flutterEngine); } }
显示结果:
V/shareUrl=: https://www.baidu.com I/flutter: common_utils e result->处理完成

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【总奖金十万】观点问题如何练就“火眼金睛”?百度人工智能开源大赛火热报名中
无数渠道来源的大量信息喷涌而来,如何准确辨识真假? 各路观点混杂,如何迅速抓住重点,进行是非观点判断? 随着5G时代的进一步提速,百度、知乎、微博、公众号、百家号等信息渠道的越来越丰富,人们在获取信息更方便和获取信息量激增的同时,也面临着信息质量良莠不齐、观点驳杂的情况,如何对信息进行是非观点极性判断成为了AI技术亟需解决的基础问题。 在此背景之下,百度将聚焦于预测答案段落摘要中所表述的是非观点极性,举办百度人工智能开源大赛。该赛事是在北京市政府、中关村科技园区管理委员会的指导下,百度联合中国人工智能产业发展联盟等单位依托2020AIIA人工智能开发者大会举办的专项赛事。 据大赛组委会介绍,本次大赛旨在为研究者和开发者提供学术和技术交流的平台,鼓励初创企业、企业开发者、高校科研人员及学生进一步提升机器阅读理解的研究水平,推动语言理解和人工智能领域技术和应用的发展。 8月10日,百度人工智能开源大赛正式启动,目前进入火热报名阶段。 以”是非观点极性判断”为主题的开发者大赛 面向观点型问题的机器阅读理解源于真实的应用场景:在智能搜索问答等产品中,针对用户输入的观点型问题,搜索引擎首先会检索...
- 下一篇
Flutter与Android通信方式->EventChannel方式(单项通信,不返回结果)
摘要: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 MethodChan...
相关文章
文章评论
共有0条评论来说两句吧...