第二百六十回

2024-01-12 02:52
文章标签 二百六十

本文主要是介绍第二百六十回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 知识回顾
  • 示例代码
  • 经验总结

我们在上一章回中介绍了通道相关的内容,本章回中将介绍其中的一种通道:MethodChannnel.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

知识回顾

我们在上一章回中介绍了通道的概念和作用,并且提到了通道有不同的类型,本章回将其中一种通道:MethodChannel.该通道主要通过方法实现通信功能,我们可以通
过方法的参数在通道上传递数据,该通道支持双向通信,就是说Flutte既可以使用通道给原生平台发送数据,也可以使用通道接收原生平台发来的数据。

示例代码

通道的使用方法在前面章节已经介绍过,不过比较抽象,我们在这里通过具体的示例代码来演示:

  1. 在Flutter中创建通道,使用构造方法就可以创建通道,方法的参数最好使用域名/功能名这样的形式,因为在原生代码中会通过该名称获取该通道;
  flutterMethodChannel = MethodChannel("www.acf.com/battery");
  1. 监听通道中的方法或者事件.这里使用通道的invokeMethod()方法监听通道中名叫getBattery的方法,它可以获取到方法的的返回值。此外,我们还通过方法的
    参数给原生平台发送数据,名叫data的参数表示具体的数据。
    result = await flutterMethodChannel.invokeMethod("getBattery",data);
  1. 在原生平台的代码中获取通道;这里继承了FlutterActivity类并且重写类中的configureFlutterEngine()方法,在该方法中获取通道;
class MainActivity: FlutterActivity() {private val channel = "www.acf.com/battery"//重写方法来设置chanel监听器,用来监听channel中的方法override fun configureFlutterEngine(flutterEngine: FlutterEngine) {super.configureFlutterEngine(flutterEngine)val methodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger,channel)// 设置监听器用来监听channel中的方法,就是flutter代码中的invokeMethod()方法调用的方法methodChannel.setMethodCallHandler { call, result ->//判断是否是获取电量的方法,不是则返回错误,返回内容通过监听器中的result参数返回if(call.method == "getBattery") {//从arguments参数中获取数据var data = call.argumentsLog.d(TAG, "configureFlutterEngine: arguments: "+data.toString())val battery = getBattery()if(battery == -1) {result.error("300","unKnowError",null)}else {result.success(battery)}}else {result.notImplemented()}}}
}
  1. 给通道设置监听器,在监听器中实现原生平台上特有的功能;设置监听器通过setMethodCallHandler()方法实现,详细可以参考上面的代码片段。该方法包含的参
    数call可以识别通道名称,以及从中获取通道中发送来的数据。result参数主要用来给channel回复数据以及错误信息。电量信息是原生平台提供的功能,下面是它的
    示例代码。我们将其封装成了独立的方法,把该方法的返回值添加到通道中可以给Flutter平台回复电量信息数据。
    private fun getBattery(): Int {var res = 0if(Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManagerres = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)}else {val intent = ContextWrapper(applicationContext).registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))}return res;}

我们在这里使用的示例代码主要参考了官方文档中给的示例,同时结合了自己的分析。上面步骤中的3和4是在Andoird平台上编写的,位于MainActivity.kt文件中。
我们还需要在IOS平台上实现类似的代码,我在这里就不演示了,因为它们的思路相同。

经验总结

本章回中介绍的MethodChannel通道类似方法,Flutter通过方法的参数给原生平台发送数据。原生平台通过方法的返回值给Flutter发送数据。这样便实现了双向通
信功能。我在这里就不演示程序的运行结果了,建议大家自己动手去实现。不过我分享一些编译时的经验。

  • 编写channel中的代码时需要使用xCode打开flutter的项目;
  • 编写channel中的代码时最后使用androidStudio重新打开andorid项目,这样会自动生成android项目文件,而不要在原来的flutter项目中编辑android代码。
  • 运行时IOS原生代码需要使用xCode编译运行,Android原生代码需要在flutter项目中编译运行才有效果。
    看官们,与"如何使用MethodChannel"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

这篇关于第二百六十回的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/596577

相关文章

二百六十、Java——采集Kafka数据,解析成一条条数据,写入另一Kafka中(复杂JSON)

一、目的 由于部分数据类型频率为1s,从而数据规模特别大,因此完整的JSON放在Hive中解析起来,尤其是在单机环境下,效率特别慢,无法满足业务需求。 而Flume的拦截器并不能很好的转换数据,因为只能采用Java方式,从Kafka的主题A中采集数据,并解析字段,然后写入到放在Kafka主题B中 二 、原始数据格式 JSON格式比较复杂,对象中包含数组,数组中包含对象 {     "de

美学心得(第二百六十六集) 罗国正

美学心得(第二百六十六集) 罗国正 (2024年8月) 3223、现代戏曲理论家、作家吴梅,是江苏苏州市人,曾任多所名牌大学教授,在戏曲理论研究上,成绩卓著,他的主要美学观点如下: 1、他认为戏曲先应有“真”,再有风趣。 2、“真所以补风化,趣所以动观听”。 3、剧的唯一宗旨在“美”。 4、“乐府亡而词兴,词兴而曲作”。 5、元剧多用北词,明人多用南曲。 6、元剧以拙朴胜,明

美学心得(第二百六十集) 罗国正

美学心得(第二百六十集) 罗国正 (2024年4月)   3110、近代文学家陈衍,诗宗盛唐,是同光派主要诗人和理论家,他的主要美学观点如下: 1、“合学人,诗人之诗二而一之”。 2、“诗人、学人二者,非肆力兼致,不足薄风骚、副雅材”。 3、“作诗文要有真实怀抱、真实道理、真实本领”。 4、“诗之为道,易能而难精,工力未至,往往侪伍时辈,菲能相尚也。然所贵乎为诗者,非必蕲于相尚也,

美学心得(第二百六十一集) 罗国正

美学心得(第二百六十一集) 罗国正 (2024年4月)   3120、                            对蔡元培的人生轨迹和美学的思考 罗国正 (2024年4月于广州)   推动中国现代历史发展的巨人——蔡元培,他的动人事绩和卓越功勋、博大精彩的人生,值得人们思考、学习、研究。在他的有生之年,几乎当时中国所有优秀人物都受过他直接或间接的影响,其中大量的杰出的领

C++之双向链表与哈希链表用法区别实例(二百六十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行

C++之结构体初始化10种写法总结(二百六十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android系统攻城狮 1

第二百六十八回

文章目录 概念介绍实现方法示例代码 我们在上一章回中介绍了跟手指移动的小球相关的内容,本章回中将介绍自定义组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 在项目中有些内容无法通过现有的组件来实现,因此需要自定义组件,自定义组件通常分为两大类:组合已经有的组件形成新的组件,重新绘制组件。组合已经有的组件我 们没有专门介绍过,不过有类似的内容,比如前面章回中实现

第二百六十五回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了Flutter中如何使用三方包相关的内容,本章回中将介绍Widget的生命周期.闲话休提,让我们一起Talk Flutter吧。 概念介绍 本章回中介绍的生命周期是指Widget从创建到结果的整个过程,这里提到的Widget是一个泛称,更加准确的说是StatefulWidget,因为StatelessWidget没有具

第二百六十三回 给geolocator插件提交问题

文章目录 1. 知识回顾2. 问题描述与解决2.1 问题描述2.2 问题解决 3. 心得与感受 1. 知识回顾 我们在前面章回中介绍过如何获取位置信息,主要介绍的是geolocator这个三方包,不过在最近使用时却发现了问题,尝试搜索解决,但是没有结果,因此给官方提交了一个问题。本章回主要记录提交问题的过程,并且分享一些经验。 2. 问题描述与解决 2.1 问题描述 我的问

第二百六十一回

文章目录 1. 概念介绍2. 使用方法2.1 简单用法2.2 自定义用法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"三方包open_settings"相关的内容,本章回中将介绍另外一个三方包:bluetooth_enable_fork.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中主要介绍三方包bluetooth_enable_f