我正在使用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:
}
}
答案 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();
获得控制权。