我试图在没有标准对话框的情况下实现语音识别(它在对话框中工作正常) .
我尝试开始收听时收到错误代码9 .
我的设备是LG G Stylo(运行Android 6.0) .
表现:
<manifest package="example.com.myapplication"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<application
.....
(也尝试添加INTERNET权限,即使这不应该是必要的,因为离线识别应该正常工作)
的build.gradle:
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "example.com.appname"
minSdkVersion 19
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
语音识别码:
private SpeechRecognizer speechRecognizer;
protected void onCreate(Bundle savedInstanceState) {
speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
speechRecognizer.setRecognitionListener(new speech_listener());
Intent intent = new intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
getApplication().getPackageName());
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH);
speechRecognizer.startListening(intent);
监听器(内部)类:
class speech_listener implements RecognitionListener
{
public void onReadyForSpeech(Bundle params){}
public void onBeginningOfSpeech(){}
public void onRmsChanged(float rmsdB){}
public void onBufferReceived(byte[] buffer){}
public void onEndOfSpeech(){}
public void onError(int error){
Log.d("Speech", "error: " + error);
}
public void onResults(Bundle results)
{
ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String answer = (String)data.get(0);
processAnswer(answer);
}
public void onPartialResults(Bundle partialResults){}
public void onEvent(int eventType, Bundle params){}
}
任何见解将不胜感激 .
3 回答
在Android 6上,此权限是危险的权限之一,这意味着您需要让用户确认它(实际获取它) . 有关详细信息,请查看this和this .
添加到Sam的answer:当您在Android 6上开发应用程序时,可能不会提示您批准"dangerous"录制音频(麦克风)权限,因此您需要在“设置”中手动打开应用程序并授予权限 .
虽然答案就在那里,但你必须将它们从许多部分组合在一起 . 什么对我有用(我得到了同样的错误):
将权限添加到清单中:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
从我的logcat
,我强烈感觉以下权限也是必要的:
<uses-permission android:name="android.permission.BLUETOOTH" />
尝试添加它,如果其他一切都失败在较新版本的android中,您还必须在运行时请求用户的许可 . 在正确的位置执行此操作至关重要,您无法在代码中的任何位置运行权限请求,必须从UI线程运行 . 对我来说,以下工作: