我正在使用 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:
}
}
最佳答案
试试下面的代码。我找到了这个答案 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);
关于android - 当其他音频已开始在设备上播放时停止我的音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29764114/