| 
 | 
 
目标:直接调用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,如果这个实例建立起来,成功运行就完成一半了。也就是说,有必要的。 
 
 
 
 
 |   
 
 
 
 |