12-6【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-2

重点实现AsrPlugin,
需要打印log。就需要一个TAG,这里定义了一个TAG

然后来添加一个方法

在里面实例化MethodChannel和我们的Dart端进行关联,参数接收一个BinaryMessager

用register.messager()获取到Message

然后来实例化Plugin。传递register

构造方法,接收一个register

重要的一步

setMethodCallHandler这样我们才能处理,来自dart端的消息。

在构造方法内获取activity。要获取activity,首先要定义activity。final类型的必须要在构造函数内初始化。

通过register拿到这个activity

重点实现onMethod

methodCall.method就是dart端调用安卓端 传过来的方法的字符串。

我们能提供了三个方法,开始、结束和取消。

这里的result

它有这几种返回

防止result多次调用,我们定义了一个helper类。在asr包下创建ResultStateful。也就是与状态的Result

实现Result的接口。

重写里面的方法

再来实现构造方法

通过of方法来访问我们的示例



修改为私有的

这样外界只能通过这个of这个方法来获取和创建这个实例

加一个TAG,因为我们要用这个TAG来打印log

加一个成员变量,通过called来判断是够已经调用过了。

如果已经调用过了,就在这里打印错误。

添加一个方法来打印错误。


这样如果重复调用了。就打印error

正常嗲用的结果返回

error反方也是同样的实现

没有实现方法


以上工具类就创建好了。接下来就可以使用它了

调用工具类


实现start方法


首先判断activity是否为空,如果activity为空的就返回异常。


接下来获取AsrManager的实例,定义一个私有的方法,加一个注解@Nullable告诉调用者,这个返回可为空。

在上面定义一个Asr的成员变量

先判断asrManager为空,然后判断activity不为空,且没有被销毁没有被关闭。

我们就来创建实例,第一个参数是上下文对象,我们把activity传进去。第二个参数依赖listener

我们来创建一个asr的listener。然后传递给上面。

最终返回asrManager

继续实现Start


因为我们这个start,接收的是一个Map类型。

所以说我们需要做一个类型转换。如果是Map类型就转换为Map类型,如果不是就传一个null

否则就打印log,并返回错误信息

stop方法

cancel

实现listener

listener是ai语音的识别的结果的回调。
这里并不是所有的接口都需要实现,我们只需要实现我们所需要的就可以了。

根据需要看提示 选择自己需要实现的接口。

这里我们重写一个最终的返回结果


如果发生错误,将错误的信息传递到dart端。

这样我们最终实现的就是这两个方法

这里少了个分号

调用stop方法和cancel

实现动态权限

谷歌在安卓6.0的时候,添加了动态权限,需要我们app在运行的时候,检查我们的app是否有这样的权限。

添加一个获取动态权限的方法,把没导入的包都导入进来。

这里需要传activity,所以这里把this改成当前的activity

这里也是把 this改成activity

这就是我们复制过来的申请权限的方法

触发这个申请权限的方法

在录音的时候才申请权限,也不是很好。可以在进入app的时候就申请权限。或者打开录音界面的时候去申请权限。

注册plugin-本节彩蛋

自己提供一个方法registerSelfPlugin

jiu

就是我们这个plugin的包名

然后再加上类的名称

这就是完整的路径

这样就完成了自己插件的注册,注册完成后dart端才能调用这个插件

回顾

引入了这几个类,这几个类主要来自于百度语音demo的实现。我们只是拿过来将他们改改名字,并做了相应的修改。

asrMananger只是实现了我们所需要的方法,

对于不需要的方法我们没有实现。

然后我们又实现了ResultStateful
我们在讲MethodChannel的时候说过。MethodChannel有一次性通讯。也就是说我们dart调用native,native回调dart,它是一次性通讯。
也就是说我们dart调用native一次,native只能回调dart一次。

如果有一种场景,用户点击了语音识别。说话的过程中,语音识别回调多次告诉我们语音识别的结果。连续的调用,这个时候我们要保证我们的程序只回调一次。这个时候就需要called这个标志位

标志位,保证逻辑的正确性

我们实现了asrPlugin

这里使用了MethodChannel这个通讯机制。

最终想着插件开发完成后,要注册我们的插件

结束

原文地址:https://www.cnblogs.com/wangjunwei/p/12311161.html

时间: 2024-10-05 04:45:25

12-6【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-2的相关文章

12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

建议先学 已经实现好了这几个类. 首先以安卓模式来打开我们的项目 在asr这个目录下,导入几个类 这几个类其实是下载的百度AI语音demo里面所提供的,里面已经提供了对百度AI的使用 首先复制这个IRecogListener IRecogListener复制过来改个名字叫做OnasrListener 这里用到了RecogResult 从demo工程里面导入RecogResult 直接复制过来即可 导入RecogEventAdpter 导入后,这里的Listener需要改成OnAsrListene

12-4【全栈皆宜】Flutter Plugin开发指南-Dart端实现

开发flutter的插件,首先来定义Dart端的接口. 创建plugin目录 创建类 这里需要用到dart端和native端通讯的channel.首先需要导入services的包 指定channe的名字要和native端统一,否则找不到 提供几个接口. 首先是start方法,参数params为可选的 停止录音的接口.和取消录音的方法 结束 原文地址:https://www.cnblogs.com/wangjunwei/p/12311152.html

任督二脉

RMI:https://www.cnblogs.com/xt0810/p/3640167.html 因为真要有技术深度的话,你可能需要花费至少2年的时间,从底层开始研究一些基础性的技术. 在打通你的底层技术任督二脉之后,再去对常见的开源技术进行深入的源码研究,比如说:dubbo.zookeeper.spring cloud.redis.rocketmq.elasticsearch,等等. 有了几年的积累过后,最后你在面试的时候,技术深度的体现,其实都是厚积薄发的. 原文地址:https://ww

天河微信小程序入门《三》:打通任督二脉,前后台互通

原文链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=505&extra=page%3D1 天河君在申请到https证书后就第一时间去部署后台环境,但是发现每次访问https都要带上8443端口实在是很坑爹啊,作为一个强迫症晚期,我要做的自然是不带端口直接访问.打开你tomcat下的conf文件夹,编辑里面的server.xml <Connector port="80" protocol=&quo

打通任督二脉---原来这就是计算机(持续更新)

笔者是一个计算机爱好者,还记得当初还是个刚上小学的孩子,那时,我第一次听说世界上还有计算机这种东西(那时都叫电脑),当时是90年代,估计那时全村也没有一个人见过电脑,所以电脑就被传的神乎其神:有了电脑,任何犯人都逃不过警察的追捕,因为电脑能算出来犯人在哪里,电脑能一瞬间算出当时觉得比登天还难的5位数的加减乘除,电视里的天气预报也是电脑算的,什么火箭,卫星,原子弹,氢弹都是电脑算出来的......  能想象出我当时对电脑崇拜的心情吗,当时,在我的眼里,电脑不是机器,而是像神一样的虚幻的存在,甚至都

案例干货|用友罗涛:打通产品开发的任督二脉

[精彩预告]用友集团开发管理部总经理罗涛将于5月21日在上海MPD工作坊进行<破解4小时上线传说>的3小时分享.通过一个故事引入互联网+产品开发的迭代思路.价值发掘和发布规划等核心思想和工具,将结组利用小图团队的力量使用影响地图.用户故事地图.无代码验证等演练手段在3个小时的工作坊内快速发布一个产品,带领学员在操作中理解精益和敏捷.文章来源:公众号 :msup(ID:msupclub)关注回复“体验工坊”有惊喜. 导读:在面对需求的变化无常.人员的变动和技术的更新时,对客户价值的识别尤其重要,

打通电商多模式支持的“任督二脉”

你听说过任督二脉吗?像这样~ 咳咳~今天不讲武功,讲电商平台设计的功夫~ 背景 当今的电商可不仅仅是B2C商城,接下来还会有O2O,往后可能还会有商超.奥莱.二手交易...且称之为业务模式~而每个业务模式下还会有预售.竞拍.拼团等不同组合的子模式. 可是我商城的商品列表页不想展示O2O的商品啊,商品列表的数据希望按一定规则相互隔离.其他模块,有的出于操作习惯的考虑不隔离,有的出于用户行为的考虑需要隔离. 各模块数据隔离需求如下   列表页 商详页 商品组 优惠券 活动 订单 ... 原商城 隔离

K2 BPM_当K2遇上医药,用流程打通企业的任督二脉_业务流程管理系统

据调查,如今仍有60%的医药企业,存在合规经营和利润下降的困扰,在“研”.“产”.“供”.“销”的运营过程中,时时伴随着严苛的管理政策和法规.如何加强企业跨部门.跨组织.跨业务线的执行能力,始终是管理层最关注的话题.而流程,则是打通“任督二脉”,提高执行力的最佳解决办法. 当K2遇上医药 K2在医药行业的核心应用 -医疗推广活动管理 -讲者管理 (含讲者资质审核/讲者在线付款流程) -全面费用管理 -经销商管理 -特价及返利管理 -医疗问询及不良反应记录追踪 -招投标管理 -注册证管理 -销售&

Appium+python自动化(十一)- 元素定位秘籍助你打通任督二脉 - 下卷(超详解)

简介 宏哥看你骨骼惊奇,印堂发亮,必是练武之奇才! 按照上一篇的节目预告,这一篇还是继续由宏哥给小伙伴们分享元素定位,是不是按照上一篇的秘籍修炼,是不是感觉到头顶盖好像被掀开,内气从头上冒出去,顿时觉得整个身体都融化了,而且身轻如燕啊!而且控制不住手,想要动手操作一番呢?那还在等什么呢,和宏哥一起练起来吧!!! 1. List定位 List故名思义就是一个列表,在python里面也有list这一个说法,如果你不是很理解什么是list,这里暂且理解为一个数组或者说一个集合.首先一个list是一个集