2014-08-27 17 views
5

questo è stato chiesto prima, ma nessuno sembrava avere una soluzione: Muting SpeechRecognizer's beep soundCome silenziare il segnale acustico per SpeechRecognizer?

Tuttavia, ho ancora vorrei sapere se qualcuno sa come disattivare il segnale acustico per SpeechRecognizer?

Creo oggetto speechRecognizer: private SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer (this);

E poi nella mia classe ho un'istanza speechRecognizer come questo

sr.setRecognitionListener(new listener()); 
Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
     RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);    
i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getApplication() 
     .getClass().getName()); 
i.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 6); 
i.putExtra(RecognizerIntent.EXTRA_PROMPT, ""); 
i.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 7000); 
sr.startListening(i); 

Chiunque con qualche buona idea? Ho cercato di creare un oggetto di AudioManager (AudioManager mAudioManager) e quindi utilizzare setStreamSolo(), ho potuto disattivare l'audio. Ma non sono sicuro di come implementarlo. L'ho aggiunto al mio codice di instantiation per speechRecognizer e non è successo niente. È qualcosa che dovrei chiamare dalla mia classe principale?

mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true); 

Grazie in anticipo.

+1

Ho avuto modo di fare quello che ho messo sul seguente link: [Disattivazione del riconoscimento vocale Google beep sound] (http: // StackOverflow .it/questions/37734868/muting-the-google-voice-recognition-beep-sound/37809750 # 37809750) –

risposta

13

Aww Vorrei commentare ma non ho il rappresentante. Comunque mi piacerebbe aiutare.

Hai visto questo:

Continues Speech Recognition beep sound after Google Search update

Is it possible to turn off the silent mode programmatically in android?

Mute the global sound in Android

Mi sembra che il codice è diverso a seconda della versione di Android - come indicato nel primo anello, Google ha cambiato l'output del "bip" sul flusso multimediale.

Immagino che una di quelle domande avrà la soluzione. Se è così, per favore pubblica ciò che hai fatto, come hai affermato che molte persone sembrano avere il problema.

La mia ipotesi è:

//mute audio 

AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
      amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true); 
      amanager.setStreamMute(AudioManager.STREAM_ALARM, true); 
      amanager.setStreamMute(AudioManager.STREAM_MUSIC, true); 
      amanager.setStreamMute(AudioManager.STREAM_RING, true); 
      amanager.setStreamMute(AudioManager.STREAM_SYSTEM, true); 


//unmute audio 

AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); 

      amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, false); 
      amanager.setStreamMute(AudioManager.STREAM_ALARM, false); 
      amanager.setStreamMute(AudioManager.STREAM_MUSIC, false); 
      amanager.setStreamMute(AudioManager.STREAM_RING, false); 
      amanager.setStreamMute(AudioManager.STREAM_SYSTEM, false); 

Immagino questa risposta dalle applicazioni dei Testimoni utente funzionerà. Il merito va a: @WitnessApplications

Anche lo scopo di questo sarebbe prima di iniziare a Rilasciare (i);

+0

Grazie, lo proverò. – portfoliobuilder

+2

Penso che sia sufficiente silenziare STREAM_MUSIC e STREAM_SYSTEM (dal livello API 23 dovresti usare AudioManager.setStreamVolume per silenziare un flusso, salvandone lo stato precedente, per ripristinarlo al suo valore originale quando vuoi riattivare) – Massimo

+0

Massimo , hai ragione. e aggiungerò, sii molto attento quando giochi con setStreamMute, potrebbe bloccare il telefono in questa modalità, assicurati di reletterarlo correttamente. –

1

Con la soluzione di cui sopra da Mark, si avrà un incidente con la seguente descrizione:

Failure delivering result ResultInfo{[email protected]:requestPermissions:, request=65736, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity java.lang.SecurityException: Not allowed to change Do Not Disturb state 

Se si desidera solo per disattivare il segnale acustico per riconoscitore vocale, basta disattivare il AudioManager.STREAM_MUSIC.

In Kotlin, sembra che questo per me:

object AudioUtils { 

    @JvmStatic fun muteAudio(shouldMute: Boolean, context: Context) 
    { 
     val audioManager: AudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager 
     val muteValue = if (shouldMute) AudioManager.ADJUST_MUTE else AudioManager.ADJUST_UNMUTE 
     audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, muteValue, 0) 
    } 

}