2016-02-07 9 views
6

Sto cercando di implementare il riconoscimento vocale senza la finestra di dialogo standard (funziona bene con la finestra di dialogo).Autorizzazione vocale insufficiente per il riconoscimento vocale Android (codice di errore 9)

Ricevo il codice di errore 9 non appena cerco di iniziare ad ascoltare.

Il mio dispositivo è un LG G Stylo (con sistema operativo Android 6.0).

manifesto:

<manifest package="example.com.myapplication" 
     xmlns:android="http://schemas.android.com/apk/res/android"> 
<uses-permission android:name="android.permission.RECORD_AUDIO"/> 
<application 
..... 

(provato anche l'aggiunta di permesso Internet, anche se questo non dovrebbe essere necessario in quanto connesso riconoscimento dovrebbe funzionare)

build.gradle:

compileSdkVersion 23 
buildToolsVersion "23.0.2" 

defaultConfig { 
    applicationId "example.com.appname" 
    minSdkVersion 19 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
} 

Speech codice di riconoscimento:

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); 

Listener (interno) classe:

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){} 
} 

Tutta la comprensione sarebbe apprezzata.

risposta

10

Su Android 6 questo permesso è uno dei più pericolosi, il che significa che è necessario chiedere all'utente di confermarlo (acquisirlo effettivamente). Controlla this e this per maggiori dettagli.

13

Aggiunta a Sam's answer: Quando si sviluppa la tua app su Android 6, potrebbe non essere richiesto di approvare il "pericoloso" permesso di registrazione audio (microfono), quindi è necessario aprire manualmente l'app in Impostazioni e concedere l'autorizzazione.

Screenshot of manually granting app permission

Problemi correlati