dangling audio focus in android

160 Views Asked by At

I am working on an app which uses audio focus feature to play TextToSpeech.

Normal scenario- play music -> start TTS -> TTS gets transient focus ->on Complete -> music play gets focus.

Error scenario - play music -> start TTS -> TTS gets transient focus ->received Phone call -> TTS focus abandoned -> call ended -> Both media player and TTS gets focus plays on high volume.

is there any other way to handle this scenario

below is Focus listener code

 am.requestAudioFocus(afChangeListener,
                            // Use the music stream.
                            AudioManager.STREAM_MUSIC,
                            // Request permanent focus.
                            AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

and

callback methods

  if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
            Log.d("READOUT", "Focus AUDIOFOCUS_LOSS_TRANSIENT " + getTTS().isSpeaking() + "SDK version = " + Build.VERSION.SDK_INT);
            if (getTTS().isSpeaking()) {
                startReadout = true;
                stopReading();
            }
        } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN || focusChange == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT || focusChange == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK) {
            Log.d("READOUT", "Focus Gain "+ focusChange);
            listnerTTSCallbacks.resumeTTS();
        } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
            Log.e("READOUT", "Focus AUDIOFOCUS_LOSS");
            stopReading();
        }
0

There are 0 best solutions below