使用Android源生的语音服务时,要使用到RecognizerIntent这个类,它实现从音频流到远程服务器来执行语音识别,下面是执
行是的主要代码:
//*开始语音
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
//通过Intent传递语音识别的模式,开启语音
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
//语言模式和自由模式的语音识别
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
//提示语音开始
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音");
//开始语音识别
startActivityForResult(intent, 1234);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Log.i("123", "recoder: " + e.toString());
Toast.makeText(getApplicationContext(), "找不到语音设备", Toast.LENGTH_SHORT).show();
}
}
});
//*处理接收到的结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
case 1:
if (resultCode == RESULT_OK && data != null && requestCode == 1234) {
ArrayList result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
Log.i("123", "result: " + result.get(0));
}
break;
default:
Toast.makeText(PracticeActivity.this, "接收出错", Toast.LENGTH_SHORT).show();
}
}
result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
Log.i("123", "result: " + result.get(0));
}
break;
default:
Toast.makeText(PracticeActivity.this, "接收出错", Toast.LENGTH_SHORT).show();
}
}
具体的东西就不写了,网上搜 RecognizerIntent 能搜一大堆,但是在手机(非模拟器)上运行时,总是会抛出ActivityNotFound异常。很多人写了怎么去使用它,但是没有说明为什么会出现这个问题,然后各种搜,又各种找不到结果。
后来找到了一个原因(不知道是不是都是这个原因导致的),就是没有 action=RecognizerIntent.ACTION_RECOGNIZE_SPEEC的Activity,所以才会报错,RecognizerIntent.ACTION_RECOGNIZE_SPEEC是在 voicesearch.apk 里的,一般的手机中可能会没有这个apk。解决的办法就是在默写平台上下载并安装这个软件就可以啦,赶紧试试看吧。