У меня возникла проблема с использованием AudioFocusChangeListener, но я все равно не могу прослушивать изменение фокусного расстояния. Может ли кто-нибудь помочь мне найти причины? Вот то, что я:AudioFocusChangeListener не может слушать
В моем FM-приложение, когда FM начинается в startFM, я помещаю
requestAudioFocus()
получить ресурсы:int result = mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_FM,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { Log.d(LOGTAG, "Successfull to request audioFocus listener"); } else { Log.d(LOGTAG, "Failure to request focus listener"); }
При выходе из приложения в
onDestroy()
, яabandonAudioFocus()
к релиз.Переменная член
mAudioFocusListener
выглядит следующим образом:private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener() { public void onAudioFocusChange(int focusChange) { switch (focusChange) { case AudioManager.AUDIOFOCUS_LOSS: Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS, turning FM off"); if (isFmOn()) { fmOff(); } break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK"); if (isFmOn()) { Log.d(LOGTAG, "AudioFocus: FM is on, turning off"); mute(); stopFM(); } break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT"); if (isFmOn()) { Log.d(LOGTAG, "AudioFocus: FM is on, turning off"); mute(); stopFM(); } break; case AudioManager.AUDIOFOCUS_GAIN: Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_GAIN"); if (isFmOn()) { Log.d(LOGTAG, "AudioFocus: FM is off, turning back on"); unMute(); startFM(); } break; default: Log.e(LOGTAG, "Unknown audio focus change code " + focusChange); } } };
По бревну, он печатает «Успешный просить audioFocus слушателя», но не печатается журнал
AudioForcus
изменения, когда сигнал тревоги или другие события с измененной звуком. Может ли кто-нибудь выяснить, что с ним не так?С другой стороны, я помещаю войти AudioService.java и AudioManger.java, где в AudioService.java, requestAudioFocus (!): если (mFocusStack.empty() & & (mFocusStack.peek(). ! mFocusDispatcher = NULL)) {
try { mFocusStack.peek().mFocusDispatcher.dispatchAudioFocusChange( -1 * focusChangeHint, // loss and gain codes are inverse of each other mFocusStack.peek().mClientId); // This doesn't excute } catch (RemoteException e) { Log.e(TAG, " Failure to signal loss of focus due to "+ e); e.printStackTrace(); } }
в AudioManager.java, здесь не как преобразования приложений: частный IAudioFocusDispatcher mAudioFocusDispatcher = новый IAudioFocusDispatcher.Stub() {
public void dispatchAudioFocusChange(int focusChange, String id) { Message m = mAudioFocusEventHandlerDelegate.getHandler().obtainMessage(focusChange, id); mAudioFocusEventHandlerDelegate.getHandler().sendMessage(m); }
Это все мой вопрос. Может ли кто-нибудь сказать мне, почему этот слушатель не может прослушивать события тревоги и другие события, связанные с изменением звука? Кстати, как я мог успешно слушать события? Может, я пропустил какой-то шаг или использовал неправильный путь? Большое спасибо.
Спасибо, это кажется, что музыка и FM конфликты. Я решаю его, изменяя музыку. Музыкальное приложение было снято с фокуса после прерывания. Все же разрешите поблагодарить вас. – deercoder