4

私のアプリでは、次のコードを使用して、MediaPlayer と STREAM_NOTIFICATION を使用して短い通知音を再生します。アプリが通知音を鳴らしているときに、同時に音楽プレーヤーアプリでバックグラウンドで音楽を再生すると、通知音が音楽の再生を中断 (一時停止) するという問題があります。アプリの通知音をバックグラウンド ミュージックの再生と同時に再生するにはどうすればよいですか? ありがとう。

  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();
4

1 に答える 1

0

質問に記載されている動作は、Android 5.x 以下に固有のようです。Android 6.x 以降では、AudioManager の動作が変更され、AudioSystem.STREAM_NOTIFICATION フラグが音楽の再生を中断しなくなりました。

回避策として、交換をお勧めします

mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

PS 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 Android 5.x と 6 の両方で AudioSystem.STREAM_NOTIFICATION を AudioSystem.STREAM_SYSTEM として扱います。バツ:

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;
    }
于 2016-04-29T14:08:40.570 に答える