Android开发之语音识别
开发背景
最近了解了一下Android Q(安卓10),得知Android Q基于语音识别技术,不需要联网就可以将视频中的语音实时转化成字幕这一功能。其实,在安卓中实现语音识别的代码很简单,我们要实现的就是调用谷歌API获取搜索结果,然后根据这个结果做自己想要的功能。
Android 中主要通过RecognizerIntent来实现语音识别。
RecognizerIntent相关知识
常量 | 简介 |
---|---|
ACTION_RECOGNIZE_SPEECH | 开启语音识别调用 |
ACTION_WEB_SEARCH | 开启网络语音识别,结果以网页的形式显示 |
EXTRA_LANGUAGE_MODEL | 语音识别的模式 |
EXTRA_MAX_RESULTS | 返回的最大结果 |
EXTRA_PROMPT | 设置用户可以开始语音的提示语 |
EXTRA_RESULTS | 将返回的字符串集中到一个list |
LANGUAGE_MODEL_FREE_FORM | 在一种模式上的自由语音 |
LANGUAGE_MODEL_WEB_SEARCH | 使用语言模型在web上搜索 |
RESULT_AUDIO_ERROR | 返回结果时,音频遇到错误 |
RESULT_CLIENT_ERROR | 返回结果时,客户端遇到错误 |
RESULT_NETWORK_ERROR | 返回结果时,网络遇到错误 |
RESULT_NO_MATCH | 未知错误 |
RESULT_SERVER_ERROR | 返回结果时,服务端遇到错误 |
代码解释
1. 首先在AndroidManifest中设置网络权限,Android 6.0以后还需要动态请求权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
2.调用Google原生语音识别
@Override
public void onClick(View v) {
//开启语音识别功能
Intent intent = new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
//设置模式,这里设置成自由模式
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
//提示语音开始文字
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Please start your voice");
//开始进行语音识别,这里先检测手机(模拟器)是否支持语音识别并且捕获异常
try {
startActivityForResult(intent, RESULT_SPEECH);
txtText.setText("");
} catch (ActivityNotFoundException a) {
Toast t = Toast.makeText(getApplicationContext(),
"Opps! Your device doesn't support Speech to Text",
Toast.LENGTH_SHORT);
t.show();
}
}
});
3.使用onActivityResult接收返回的结果
@Override
protected void onActivityResult(int requestCode, int resultCode