首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MediaPlayer播放STREAM_NOTIFICATION中断音乐播放

MediaPlayer播放STREAM_NOTIFICATION中断音乐播放
EN

Stack Overflow用户
提问于 2013-09-24 03:16:38
回答 1查看 1.2K关注 0票数 4

在我的应用程序中,我使用以下代码在STREAM_NOTIFICATION中使用MediaPlayer播放简短的通知声音。问题是,当应用程序播放通知声音,同时音乐播放器应用程序在后台播放音乐时,通知声音将中断(暂停)音乐播放。如何让我的应用通知声音与背景音乐播放同时播放?谢谢。

代码语言:javascript
复制
  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();
EN

回答 1

Stack Overflow用户

发布于 2016-04-29 22:08:41

问题中描述的行为似乎是Android 5.x和更低版本的特定行为。对于Android6.x和更高版本,AudioManager的行为已经改变,AudioSystem.STREAM_NOTIFICATION标志不再中断音乐播放。

作为解决方法,我建议替换

代码语言:javascript
复制
mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

通过

代码语言:javascript
复制
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

附注:不确定安卓平台到底发生了什么变化,但根据https://android.googlesource.com/platform/frameworks/base/+/android-5.1.1_r37/media/java/android/media/AudioAttributes.javahttps://android.googlesource.com/platform/frameworks/base/+/android-6.0.0_r26/media/java/android/media/AudioAttributes.java的说法,他们在安卓5.x和6.x上都将AudioSystem.STREAM_NOTIFICATION视为AudioSystem.STREAM_SYSTEM:

代码语言:javascript
复制
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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18967044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档