AUDIOFOCUS_LOSS вызывается после телефонного звонка в android

Я пытаюсь сделать паузу медиа-плеер, когда звонит телефон. Я использую образец кода с сайта android. Это вот так;

public void onAudioFocusChange(int focusChange) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: // resume playback if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) { mMediaPlayer.start(); mMediaPlayer.setVolume(1.0f, 1.0f); } break; case AudioManager.AUDIOFOCUS_LOSS: // Lost focus for an unbounded amount of time: stop playback and // release media player stopMediaPlayer(); break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: // Lost focus for a short time, but we have to stop // playback. We don't release the media player because playback // is likely to resume if (mMediaPlayer.isPlaying()) mMediaPlayer.pause(); break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: // Lost focus for a short time, but it's ok to keep playing // at an attenuated level if (mMediaPlayer.isPlaying()) mMediaPlayer.setVolume(0.1f, 0.1f); break; } } 

Когда телефон звонит, AUDIOFOCUS_LOSS_TRANSIENT отправляется; Это нормально. И когда вызов заканчивается, AUDIOFOCUS_GAIN отправляется, и игрок продолжает играть; Что тоже нормально. Но сразу после отправки AUDIOFOCUS_GAIN отправляется AUDIOFOCUS_LOSS. Есть идеи, почему он теряет фокус аудио? Thx заранее.

Две вещи, которые нужно проверить: 1) У вас есть кнопка воспроизведения, например, при нажатии, запросы фокусируются и начинают воспроизведение? У меня была проблема, когда они сыграли звук «тика», чтобы обеспечить обратную связь с кликом. Когда это произошло, они уберут фокус от моего приложения. В вашем XML установите это значение равным false для всех ваших кнопок в этом действии:

 android:soundEffectsEnabled = 'false' 

2) Проверьте установку других приложений медиаплеера, которые также запрашивают фокус. Запрашивают ли они сразу после потери? Если это не так, вы можете сделать это иначе, чем предупредить своих пользователей не устанавливать это приложение.

Наверное, это поможет кому-то. У меня была эта проблема, когда в проекте не использовался напрямую MediaPlayer, а через VideoView. Он имеет следующий код при открытии файла

 AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); 

Так как вы открываете файл, он получает аудиофокус и слушатель, который установлен перед тем, как запускается с помощью focusChange AudioManager.AUDIOFOCUS_LOSS .