2015-04-21 151 views
4

我正在使用MediaPlayer類播放音頻。我有一個要求,當用戶在設備上播放其他一些歌曲時,應用程序播放的音頻應該會自動停止。如何獲得通知,其他音頻已經開始在我的應用程序的設備上播放?請指教。其他音頻開始在設備上播放時停止我的音頻

更新:

我試過這個代碼,它的工作原理是第一次。即,當我啓動我的應用程序並在我的應用程序中播放音頻時,我的應用程序正在播放音頻。然後,當我打開某個音樂播放器並在其中播放其他音頻時,我的應用會在「AUDIOFOCUS_LOSS」中檢測到通知。我在這裏停止我的音頻。然後,當我的應用程序再次播放音頻,然後回到音樂播放器並在那裏播放其他音頻時,這次我的應用程序無法檢測到此通知,因此我無法再停止我的音頻。這是我現在的問題。

有人可以幫我解決這個問題嗎?

public class MyActivity extends ActionBarActivity implements OnCompletionListener, OnPreparedListener, OnErrorListener, OnBufferingUpdateListener, AudioManager.OnAudioFocusChangeListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_hclsquad_fm); 

     audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
     audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); 
    } 
@Override 
    public void onAudioFocusChange(int focusChange) { 

     switch (focusChange) { 
      case AudioManager.AUDIOFOCUS_GAIN: 
       Toast.makeText(MyActivity.this, "Focus GAINED", Toast.LENGTH_LONG).show(); 
       break; 
      case AudioManager.AUDIOFOCUS_LOSS: 
      case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: 
       Toast.makeText(MyActivity.this, "Focus LOSS", Toast.LENGTH_LONG).show(); 
       if(mediaPlayer != null) 
        killMediaPlayer(); 
       break; 
      case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: 
       Toast.makeText(MyActivity.this, "Focus LOSS TRANSIENT", Toast.LENGTH_LONG).show(); 
       break; 
      default: 
     } 
    } 

回答

2

試試以下代碼。我發現這個答案here

OnAudioFocusChangeListener listener = new OnAudioFocusChangeListener() { 
    public void onAudioFocusChange(int focusChange) { 
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){ 
     // Lower the volume 
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { 
      // Raise it back to normal 
     }  
    }  
}; 

AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
int request = am.requestAudioFocus(listener, 
AudioManager.STREAM_MUSIC, 
AudioManager.AUDIOFOCUS_GAIN); 
+0

請在我的問題中查看我更新的評論 – Stella

1

負責應用程序將一直播放音頻之前獲得的音頻焦點。如果不需要音頻焦點,我認爲您無法檢測到另一個應用何時播放音頻。

而是請求音頻聚焦在你的onCreate的,做你開始播放音頻前:

private void play(){ 
    requestAudioFocus(); 
} 
0

你正在失去音頻焦點。您應該致電

requestAudioFocus(); 

重新獲得控制權。