全栈工程师开发手册 (作者:栾鹏)
安卓教程全解
安卓调用系统语音识别功能全解(谷歌语音服务):获取识别结果,使用语音识别进行搜索。
首先要添加权限
<uses-permission android:name="android.permission.INTERNET"/>
先初始化一个语音识别请求,调用系统语音识别功能,返回识别结果。
其主要原理就是将语音发送到google云端,然后云端处理,匹配相应的数据,发送到客户端。不过一般谷歌语音被阉割了,或无法翻墙,推荐使用讯飞或百度
private void speechInput() {try {Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); //ACTION_RECOGNIZE_SPEECH接收输入语音,ACTION_WEB_SEARCH触发网络搜索或语音操作//指定自有形式的输入intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); //EXTRA_LANGUAGE_MODEL表示用于输入音频的语言模型intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"开始语音");//EXTRA_PROMPT语音输入对话框中的提示字符串//intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); //EXTRA_MAX_RESULTS限制潜在识别结果的数目//intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH); //EXTRA_LANGUAGE指定默认值以外的输入语言startActivityForResult(intent, VOICE_RECOGNITION);} catch (Exception e) {e.printStackTrace();Toast.makeText(getApplicationContext(), "找不到语音设备", 1).show();}}
接收语音识别返回结果
//查找一个语音识别请求的结果@Overrideprotected void onActivityResult(int requestCode,int resultCode,Intent data) {if (requestCode == VOICE_RECOGNITION && resultCode == RESULT_OK) {ArrayList<String> results;results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);float[] confidence;String confidenceExtra = RecognizerIntent.EXTRA_CONFIDENCE_SCORES;confidence = data.getFloatArrayExtra(confidenceExtra);//在这里使用识别的语音字符串results做点事情}super.onActivityResult(requestCode, resultCode, data);}
调用系统语音识别后直接进行网络搜索
private void speechWebSearch() {Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); //LANGUAGE_MODEL_WEB_SEARCH表示进行网络搜索startActivityForResult(intent, 0);}
安卓调用系统语音识别功能全解(谷歌语音服务):获取识别结果 使用语音识别进行搜索。