OnAudioFocusChangeListener () не вызывается на некоторых устройствах

Я использую AudioFocus для музыкального плеера. Он отлично работает на Huawei P9 Lite (Android N) и Huawei P20 Lite (Android O). Но на Samsung Galaxy J3 (2016) (Android L) не работает, похоже, что я не запрашивал фокусировку звука.

Вот как я установил слушателя

mAudioFocusListener = new AudioManager.OnAudioFocusChangeListener() {
        @Override
        public void onAudioFocusChange(int focusChange) {
            switch (focusChange) {
                case AudioManager.AUDIOFOCUS_GAIN:
                    Log.i("AUDIOFOCUS", "AUDIOFOCUS_GAIN");
                    play();
                    break;
                case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:
                    Log.i(TAG, "AUDIOFOCUS_GAIN_TRANSIENT");
                    break;
                case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:
                    Log.i(TAG, "AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK");
                    break;
                case AudioManager.AUDIOFOCUS_LOSS:
                    Log.e(TAG, "AUDIOFOCUS_LOSS");
                    stop();
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    Log.e(TAG, "AUDIOFOCUS_LOSS_TRANSIENT");
                    stop();
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    Log.e(TAG, "AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
                    break;
                case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
                    Log.e(TAG, "AUDIOFOCUS_REQUEST_FAILED");
                    break;
                default:

            }
        }
    };

А это метод запроса

 private boolean requestAudioFocus() {
    if (!mAudioFocusGranted) {
        AudioManager am = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
        if (am != null) {
            int result = am.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
            if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
                mAudioFocusGranted = true;
                Log.i("AUDIOFOCUS", "AUDIOFOCUS_GAIN");
            } else {
                //  failed
                Log.e(TAG, "Failed to get audio focus."); //todo
            }
        }else{
            //TODO
        }
    }
    return mAudioFocusGranted;
}

Есть у кого-нибудь идеи?

Обновлено: я решил поместить запрос аудиофокуса в основной поток.

Из документации developer.android.com/guide/topics/media-apps/audio-focus

debo.stackoverflow 25.05.2018 15:55

Пожалуйста, проверьте раздел «Аудиофокус обрабатывается по-разному в зависимости от запущенной версии Android:». Может, это тебе поможет.

debo.stackoverflow 25.05.2018 15:55
0
2
889
0

Другие вопросы по теме