Я использую 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;
}
Есть у кого-нибудь идеи?
Обновлено: я решил поместить запрос аудиофокуса в основной поток.
Пожалуйста, проверьте раздел «Аудиофокус обрабатывается по-разному в зависимости от запущенной версии Android:». Может, это тебе поможет.
Из документации developer.android.com/guide/topics/media-apps/audio-focus