当其他音频开始在设备上播放时停止我的音频

时间:2015-04-21 06:01:50

标签: android

我正在使用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:
        }
    }

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

在播放音频之前,负责任的应用始终会获得音频焦点。如果没有请求音频焦点,我认为你不可能检测到另一个应用播放音频的时间。

不要在onCreate中请求音频焦点,而是在开始播放音频之前执行此操作:

private void play(){
    requestAudioFocus();
}

答案 2 :(得分:0)

你正在失去音频焦点。你应该打电话给

requestAudioFocus();

获得控制权。