|
目标:直接调用iat 的方法,(不是通过activity调用),也就是说,直接调用+初始化配置,看看以下流程可否泛化。
1、它的MainActivity 是调用了一个registerForActivityResult, 传一个参数 Permission,这个是打开新的Activity需要的权限,一般是允许录音。这个是不能或可能泛化的。(这个可否存在主Activity中。)
2、接着传递SpeechApp.initializeMsc, 就是对科大各个模块初始化。这个是可以泛化的。
3、如上,在SpeechApp里面,是调用了一个SpeechUtility, 这个是库函数,需要引进科大库。当引进科大库成功后,这个就可以运行,理论上是可泛化的。
4、这就导致,在它的示例方法里,是直接打开一个Activity。
再看它打开的Activity:
1、按科大的说法,这是一个Activity, 同时实现了OnClickListener。这个是否可泛化来分析一下:
2、首先建立了一堆实例变量。
3、在这个Activity的onCreate里面,设置了本Activity的布局页面(R.layout)
4、初始化了各个Layout组件。(见 **详细介绍)
5、这句很关键,通过SpeechRecognizer.createRecognizer(this, mInitListenser); 来初始化mIat 句柄实例变量。注意这后一个参数是回调函数。 而这个THIS,这里是否可由IatDemo这个Activity更改成MainActivity的context。这里存疑! 传递父实例(this)mIat是否无法创建!!!这个可以自己试试或问社区。可Try/except 查看结果
6、初始化mIatDialog (这个可能没有必要,详细再看它的源代码)
7、从Preferences 取得"com.iflytek.setting" 的内容,如果没有设置,就将Activity.MODE_PRIVATE的值作为它的内容,也就是0,(数值的名称),Activity.MODE_PRIVATE表示本Activity(IatDemo)是私有的,建立的文件只能被调用者使用。
8、把mResultText和R.id.iat_text对接。
下面看看初始化Layout:
1、先是对接各个按钮的onClick()
2、配置radioGroup。用来配置mEngineType 是 TYPE_CLOUD 还是 TYPE_LOCAL ("cloud" or "local", 值的名称)
下面统一掌管个按钮的onClick():
1、 先赋值ret = 0; 这个是onClick()内部调用函数的返回值(如mIat.startListening(mRecognizerListener))注意这后一个参数是回调函数
2、验证mIat是否为空,如果是,则表示初始化(第一次)失败。注意这个第一次初始化是指MainActivity调用了createUtility进行初始化。
3、如按了识别按钮,运行setParam()进行又一个初始化。
4、如果iat_show,就调用对话听写,否则调用直接听写(mIat.startListening(mRecognizerListener)),调用后看回执(ret),如果不为ErrorCode.SUCCESS (0),则失败,否则可以开始说话。这里mRecognizerListener是回调函数,负责获取结果。
5、还有一个选项是流处理的听写,这里从略。
6、以及停止,取消,上传用户词表等。
下面,回调函数mInitListenser:1、有一个onInit( int code)回调函数,判断mIat是否成功初始化(这个很重要!要在新程序里实现!)
下面是上传回调函数,判断上传是否成功。
下面,mRecognizerListener回调函数,这个关键,直接处理说话语音的:
1、开始说话
2、出问题3、出结果,可使用该结果值。 等等。
下面是对话回调函数,也出结果,可以使用该结果值。
再下面是细节(第二次)初始化函数,这个需要一点点精确的按照它设置的来
下一个是getResourcePath,就是获取本地运行的jet(人工智能)文件,这个如果远程应该没有用到。
下一个在IatDemo 销毁是释放mIat (onDestroy)
以上就是IatDemo的基本内容。
再看看MainActivity调用的初始化 (initializeMsc):
这里调用了SpeechApp模块。
1、初始化过了,退出。
2、配置 初始化参数
3、SpeechUtility.createUtility(context, param.toString()); 建立第一次初始化
4、设置:初始化过了。
以上就是基本的一个流程。在MainActivity中,还有一些内容,再评审,如果需要的,附在下面。
个人感觉,先建立mIat,如果这个实例建立起来,成功运行就完成一半了。也就是说,有必要的。
|
|