在Android中使用语音识别的比较:通过Intent还是on-thread?

hca*_*ver 14 android speech-recognition speech-to-text android-intent

介绍

Android为我提供了两种使用语音识别的方法.

一种方式是一个Intent,如在这个问题中:意图的例子.一个新Activity的被推到堆栈的顶部,它听取用户的意见,听到一些语音,试图转录它(通常通过云),然后通过onActivityResult电话将结果返回给我的应用程序.

第二个是通过获取SpeechRecognizer,喜欢这里的代码:SpeechRecognizer例子.在这里,看起来语音被记录并转录到其他一些线程上,然后回调给我带来了结果.这是在不离开我的情况下Activity完成的.

我想了解这两种语音识别方式的优缺点.

到目前为止我得到了什么

使用Intent:

  • 编码很简单
  • 避免重新发明轮子
  • 在整个设备上提供一致的语音识别用户体验

  • 使用它自己的窗口创建新活动可能会很慢

使用SpeechRecognizer:

  • 让我在我的应用程序中保留对UI的控制权
  • 给了我额外的回应可能性(文档)

  • 仅限于从主线程调用
  • 更多的控制需要更多的错误检查.

gre*_*egm 12

除此之外,我至少还要补充一点:

SpeechRecognizer对于免提用户界面更好,因为您的应用程序实际上会响应"无匹配"等错误条件,并可能重新启动.当您使用时Intent,应用程序会发出蜂鸣声并显示一个用户必须按才能继续的对话框.

我的总结如下:

SpeechRecognizer

  • 显示不同的UI或根本没有UI.你真的希望你的应用程序的用户界面发出哔哔声吗?您是否真的希望UI在出现错误时显示对话框并等待用户点击?

  • 在语音识别发生时,应用程序可以执行其他操作

  • 可以在后台或服务中运行时识别语音

  • 可以更好地处理错误

  • 可以访问低级语音内容,如原始音频或RMS.分析音频或使用响度发出某种闪烁的光来指示应用正在收听

意图

  • 为用户提供一致且易于使用的UI
  • 易于编程