Pausa tono del teléfono mientras habla a través de texto a voz y luego reanudar

Estoy haciendo un llamador que habla la aplicación que hablan nombre del llamador usando TTS. Quiero pausar el tono mientras TTS está hablando y luego reanudar el tono de llamada. De lo que he investigado podemos usar AudioFocus (espero que sí). De todos modos estoy usando el siguiente código

Actualizar

Estoy usando este código ahora.

 public void speak(final String talk) throws InterruptedException { final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int musicVolume= audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicVolume, 0); audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); int result = tts.setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onStart(String utteranceId) { // TODO Auto-generated method stub } @Override public void onError(String utteranceId) { // TODO Auto-generated method stub } @Override public void onDone(String utteranceId) { // TODO Auto-generated method stub audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); System.out.println("done"); } }); HashMap<String, String> params = new HashMap<String, String>(); params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"stringId"); tts.speak(talk, TextToSpeech.QUEUE_FLUSH, params); System.out.println("speaking after tts is over" + talk+" "+result); } 

Aunque se ha detenido el Ringtone y tts se reproduce pero después de tts se reproduce Ringtone no se reanuda. ¿Que debería hacer?

2 Solutions collect form web for “Pausa tono del teléfono mientras habla a través de texto a voz y luego reanudar”

Finalmente después de rascarme la cabeza durante dos días finalmente lo hice. Para todos aquellos que quieren implementar algo como esto, pero no pueden hacerlo aquí es el código

 public void speak(final String talk) throws InterruptedException { final AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int ringVolume = audioManager .getStreamVolume(AudioManager.STREAM_RING); int musicVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); currentRingVolume = ringVolume; musicVolume = (int) ((musicVolume * seekbarValue) / 100); if (PauseRingtone == true) { audioManager.setStreamVolume(AudioManager.STREAM_RING, 1, AudioManager.FLAG_SHOW_UI); } else { audioManager.setStreamVolume(AudioManager.STREAM_RING, ringVolume, AudioManager.FLAG_SHOW_UI); } audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicVolume, 0); int result = tts .setOnUtteranceProgressListener(new UtteranceProgressListener() { @Override public void onStart(String utteranceId) { // TODO Auto-generated method stub } @Override public void onError(String utteranceId) { // TODO Auto-generated method stub } @Override public void onDone(String utteranceId) { // TODO Auto-generated method stub System.out.println("done"); audioManager.setStreamVolume(AudioManager.STREAM_RING, currentRingVolume, 0); } }); HashMap<String, String> params = new HashMap<String, String>(); params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "stringId"); tts.speak(talk, TextToSpeech.QUEUE_FLUSH, params); System.out.println("speaking after tts is over" + talk + " " + result); } 

Explicación

ringVolume – obtiene el volumen actual del volumen de ringtone .ie ringtone establecido en el teléfono.

musicVolume – obtiene el volumen actual de la música

currentRingVolume sólo conserva el ringVolume del ringVolume .

Nota: STREAM_RING y STREAM_MUSIC son cosas diferentes. Ver Diferentes volúmenes

Ahora la idea básica es mute el ringtone mientras TTS está hablando y luego ponerlo a valor anterior.

seekBarValue – es mi SeekBar que representa el nivel del volumen de TTS volumen de musicVolume y es opcional.

PauseRingtone – es una CheckBox Preference que comprueba si queremos pausar el tono de llamada mientras hablamos. Si true es establecer el AudioManager.STREAM_RING a 1 es decir, vibrate otro modo ringVolume es decir, el Phone Value , para que tanto TTS como el Ringtone reproduzcan al mismo tiempo.

 audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,musicVolume, 0) 

Establece el volumen de TTS en musicVolume . Después de que TTS haya terminado de hablar, por ejemplo, en onDone() , establecimos el volumen del Ringtone retorno en el volumen de Ringtone usando currentRingVolume .

Si mi respuesta ayudó a marcar mi respuesta útil.

Deshacerse de este oyente de enfoque y agregar este código phoneStateListener clase. Esto resolverá su problema.

  int mode = audioManager.getRingerMode(); int musicVolume= audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, musicVolume, 0); audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); if(phoneState == TelephonyManager.CALL_STATE_IDLE) { audioManager.setRingerMode(mode); } 
  • Uso de la preferencia de lista en Android
  • Android TTS no habla gran cantidad de texto
  • Android TTS añadir idiomas
  • Android: escucha un comando de voz (todo el tiempo)
  • Android Texto a voz añadir texto de voz continuamente
  • Otras opciones de la biblioteca de Android TextToSpeech
  • Resalte la palabra actual que el motor TTS está hablando
  • Cómo crear un motor de texto a voz personalizado
  • Problemas con TTS en el Samsung Galaxy S3
  • Sistema lengua turca para el texto al discurso
  • ¿Por qué la intención de ACTION_CHECK_TTS_DATA es "incómoda de usar"?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.