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

建议先学
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
已经实现好了这几个类。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

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

首先以安卓模式来打开我们的项目
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
在asr这个目录下,导入几个类
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
这几个类其实是下载的百度AI语音demo里面所提供的,里面已经提供了对百度AI的使用
首先复制这个IRecogListener
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
IRecogListener复制过来改个名字叫做OnasrListener
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

这里用到了RecogResult
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
从demo工程里面导入RecogResult
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
直接复制过来即可
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
导入RecogEventAdpter
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
导入后,这里的Listener需要改成OnAsrListener
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
全局替换
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
这里的日志的引用删除
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

这里的MyLogger修改为
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
修改为Log.e 
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
还有其他的地方有,都替换为Log.e
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

创建管理类

处理录音的管理类
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
我们创建的类参考百度的例子里面的MyRecognizer
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
把MyRecognizer这个里面的代码否复制到AsrManager类里面。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
根据提示导入对应的包
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
参考demo 的类里面的包引用 复制过来
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
复制过来后,把无法识别的去掉。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
创建一个TAG
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
批量替换一下
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
这里删除
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
这里删除
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
删除
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
构造方法的名字要改过来
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
log修改为系统的log
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
修改为Log.e
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
这里的Listener创建为一个
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
这行代码删除掉。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
参数这里保持一致
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
离线的方法我们不需要,这里直接删除
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
log修改 为下面。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
stop方法也修改
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

cancel方法

12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
release这段代码不需要
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
下面这个也删除。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
AseManager已经实现好了。就是用来调用百度的语音SDK来完成开始录音、停止录音以及取消录音。还有释放资源这几个方法。

为AsrManager设置Plugin

因为我们的flutter还不能直接的调用它,需要通过我们的中间件。起名叫做AsrPlugin
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
接下来重点来实现AsrPlugin。这里需要用到MessageChannel

实现一个接口,这里还没有任何的提示
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
这是因为我们这里还没有添加flutter的依赖。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
我们来添加对flutter的依赖,这样我们才好在里面开发plugin。

App是怎么依赖Flutter SDK的

首先我们这个App项目里面依赖了flutter
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

app的gradle里面配置了这样一段代码
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
配置了以后 最终得到了FlutterRoot
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
通过FlutterRoot得到了flutter这样一个脚本。让我们当前的gradle来应用这样的脚本。这样我们的App项目就依赖了Flutter SDK了。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

参考App

复制app的这段代码
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
复制过来
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
这里也需要复制
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
sync同步
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
查看Model有没有对Flutter依赖成功。首先我们调用Flutter里面的一个类,如果调用成功了就表示已经依赖成功了。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
它就是flutter包下面的。这就说明我们在这个module里面已经成功的依赖了flutter的SDK
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
实现接口内的方法
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

解决两个模块之间都引用flutter sdk的冲突

两个module同时依赖了flutter。app这个Module又同时依赖asr_plugin这个module,他们两个之间的flutter sdk就会冲突。那么怎么解决这个冲突呢?
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

首先打开app这个模块的gradle。配置一下,让它对flutter依赖不冲突。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
需要进行两步修改,
第一步,在继承sdk的时候,导入了三种架构的目录。对abiFilters过滤这三种包,也就是只打这三种架构的包。加入X86是因为模拟器只支持X86的架构
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

第二步:
添加打包的配置
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
也就是打包的时候会出现两份so。我们只取一份。
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1
配置好以后进行同步
12-5【打通Flutter与Android的任督二脉】Flutter Plugin开发指南-Android端实现-1

结束

 

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

上一篇:Microsoft .NET Pet Shop 4: Migrating an ASP.NET 1.1 Application to 2.0


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