在我的应用中,我使用以下代码使用带有STREAM_NOTIFICATION的MediaPlayer播放简短的通知声音。问题在于,当应用播放通知声音并且同时音乐播放器应用播放音乐时,通知声音将中断(暂停)音乐播放。如何让我的应用程序的通知声音与背景音乐播放同时播放?谢谢。
AssetFileDescriptor afd =
mResources.openRawResourceFd(resId);
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
}
});
mediaPlayer.prepare();
mediaPlayer.start();
答案 0 :(得分:0)
问题中描述的行为似乎特定于Android 5.x及更低版本。对于Android 6.x及更高版本,AudioManager的行为已发生变化,AudioSystem.STREAM_NOTIFICATION标志不再中断音乐播放。
作为解决方法,我建议更换
mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
通过
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
P.S。不确定Android平台究竟发生了什么变化但是根据 https://android.googlesource.com/platform/frameworks/base/+/android-5.1.1_r37/media/java/android/media/AudioAttributes.java和https://android.googlesource.com/platform/frameworks/base/+/android-6.0.0_r26/media/java/android/media/AudioAttributes.java他们将AudioSystem.STREAM_NOTIFICATION视为Android 5.x&的AudioSystem.STREAM_SYSTEM。 6.x中:
public Builder setInternalLegacyStreamType(int streamType) {
switch(streamType) {
/*...*/
case AudioSystem.STREAM_SYSTEM:
mContentType = CONTENT_TYPE_SONIFICATION;
break;
/*...*/
case AudioSystem.STREAM_NOTIFICATION:
mContentType = CONTENT_TYPE_SONIFICATION;
break;
/*...*/
default:
Log.e(TAG, "Invalid stream type " + streamType + " for AudioAttributes");
}
mUsage = usageForLegacyStreamType(streamType);
return this;
}