繁体   English   中英

为什么即使指定了RECORD_AUDIO权限,SpeechRecognizer仍说我的权限不足?

[英]Why does SpeechRecognizer say that I have insufficient permissions even when I've specified the RECORD_AUDIO permission?

我正在尝试在我的应用中获得语音识别。 我收到一个权限错误,提示我需要RECORD_AUDIO权限,但我已在清单中指定了该权限。 我在Android L上,也正在为该API版本构建(最低要求)。 这是确切的错误:

03-09 22:43:58.996    1555-1576/com.google.android.googlequicksearchbox:search E/RecognitionService﹕ call for recognition service without RECORD_AUDIO permissions

这是怎么回事? 这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.andrewstromme.myapp" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.INTERNET" />

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

来自MainActivity.java:

public class MainActivity extends Activity implements RecognitionListener {
private SpeechRecognizer mRecognizer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
    mRecognizer.setRecognitionListener(this);
}

public void listenForSpeech() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass()
            .getPackage().getName());
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "say something");
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
    mRecognizer.startListening(intent);
}

void showToastMessage(String message){
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}

@Override
public void onReadyForSpeech(Bundle params) {

}

@Override
public void onBeginningOfSpeech() {
    showToastMessage("start of speech");

}

@Override
public void onRmsChanged(float rmsdB) {

}

@Override
public void onBufferReceived(byte[] buffer) {

}

@Override
public void onEndOfSpeech() {

}

@Override
public void onError(int error) {
    if (error == SpeechRecognizer.ERROR_AUDIO) {
        showToastMessage("audio recording error");
    } else if (error == SpeechRecognizer.ERROR_CLIENT) {
        showToastMessage("client side error");
    } else if (error == SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS) {
        showToastMessage("insufficient permissions");
    } else if (error == SpeechRecognizer.ERROR_NETWORK) {
        showToastMessage("network error");
    } else if (error == SpeechRecognizer.ERROR_NETWORK_TIMEOUT) {
        showToastMessage("network timeout");
    } else if (error == SpeechRecognizer.ERROR_NO_MATCH) {
        showToastMessage("no speech match");
    } else if (error == SpeechRecognizer.ERROR_RECOGNIZER_BUSY) {
        showToastMessage("recognizer busy");
    } else if (error == SpeechRecognizer.ERROR_SERVER) {
        showToastMessage("server error");
    } else if (error == SpeechRecognizer.ERROR_SPEECH_TIMEOUT) {
        showToastMessage("no speech input");
    } else {
        showToastMessage("unknown error");
    }
}

@Override
public void onResults(Bundle results) {
    String result = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION).get(0);
    TextView t = (TextView)findViewById(R.id.spokenText);
    t.setText(result);
}

@Override
public void onPartialResults(Bundle partialResults) {

}

@Override
public void onEvent(int eventType, Bundle params) {

}
}

哦,我觉得很傻。 我的<uses-permission ...>标签必须位于我的<application></application>标签之外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM