2012-08-07 68 views
0

我正在創建音樂播放器應用程序。如何將我的MusicPlayer應用程序保存到OnAudioFocusChangeListener

我想:

  1. 當用戶使用我的應用程序播放歌曲,那麼默認的音樂播放器應該得到停止(播放)
  2. 如果其他一些應用程序開始播放時,我的應用程序已經打我的時候應該停下來。

我可以用第一點使用Audio Focus來解決問題。 但對於第二點,即處理AUDIOFOCUS_LOSS,我正面臨一些問題。

問題: 我已經遵循了文檔,但我應該如何註冊我的音樂播放器服務以檢測AudioFocus已丟失。

對於第一點,這裏是代碼:

if (reqAudioFocus()) { 
    mPlayer.start(); 
} 

private boolean reqAudioFocus() { 
    boolean gotFocus = false; 
    int audioFocus = am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, 
      AudioManager.AUDIOFOCUS_GAIN); 
    if (audioFocus == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
     gotFocus = true; 
    } else { 
     gotFocus = false; 
    } 
    return gotFocus; 
} 

對於第二點我到目前爲止的代碼:

//Class implements OnAudioFocusChangeListener 

@Override 
public void onAudioFocusChange(int focusChange) { 
    /* 
    * TODO : Call stopService/onDestroy() method. Pause the track; Change 
    * the Play/Pause icon; save the track postion for seekTo() method. 
    */ 
    if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) { 
     // TODO: Pause playback 
     if (mPlayer.isPlaying()) { 
      mPlayer.pause(); 
     } 
    } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { 
     // TODO: Resume Playback 
     if (!mPlayer.isPlaying()) { 
      mPlayer.start(); 
     } 
    } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { 
     // TODO: stop playback. 
     // am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 
     am.abandonAudioFocus(afChangeListener); 
    } 

} 

現在如何讓我的應用程序調用onAudioFocusChange()當應用程序丟失音頻焦點。

由於

回答

1

的第一個參數requestAudioFocusOnAudioFocusChangeListener實例。目前您正通過null。假設你已經在同一個班上實施了reqAudioFocusonAudioFocusChanged,通過this而不是null應該足夠了。

相關問題