我遇到使用AudioFocusChangeListener的問題,但仍然無法聽到音頻焦點更改。有人能幫我找到原因嗎?這是我做的:AudioFocusChangeListener不能聽
在我FM的應用程序,在FM中startFM開始,我把獲得資源:
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,這裏沒有任何EXCUTE: 私人IAudioFocusDispatcher mAudioFocusDispatcher =新IAudioFocusDispatcher.Stub(){
public void dispatchAudioFocusChange(int focusChange, String id) { Message m = mAudioFocusEventHandlerDelegate.getHandler().obtainMessage(focusChange, id); mAudioFocusEventHandlerDelegate.getHandler().sendMessage(m); }
這就是我的問題。有人可以告訴我爲什麼這個聽衆不能聽警報事件和其他音響改變的事件嗎?順便說一句,我怎麼能成功地聽到事件?也許我錯過了一些步驟或使用了不正確的方式?非常感謝。
感謝,似乎音樂和FM衝突。我通過修改音樂來解決它。音樂應用程序在中斷後已成爲焦點。謝謝你們一樣。 – deercoder 2012-09-19 13:44:05