我正在尝试在Service中使用两个MediaPlayers在后台播放一些音频。如果我只想播放一个mp3,则一切正常,但是,如果我尝试使用两个MediaPlayer实例同时播放两个mp3,则只有最后一个可以正常工作。这很奇怪,因为它可以在仿真器和某些设备中使用,但是我无法使其在Nexus 5中运行。这是我用来创建两个MediaPlayer实例的代码:

private void playWithPiano() {
    mp1 = initializePlayer(filenameVoz); // filenameVoz is the mp3 file name in raw folder
    mp2 = initializePlayer("base_piano");
    mp1.start();
    mp2.start();
}

private MediaPlayer initializePlayer(String filename) {
    int identifier = getResources().getIdentifier(filename,
            "raw", getPackageName());
    MediaPlayer mp = MediaPlayer.create(this, identifier);

    mp.setOnErrorListener(new OnErrorListener() {
        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
            Log.d(TAG_LOG, "OnErrorListener");
            stop();

            return false;
        }
    });
    mp.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            stop();
        }
    });

    return mp;
}

如果我评论mp2.start行,则可以收听mp1音频。就像启动MediaPlayer一样,其他任何实例也都停止了,对此我将不胜感激。

最佳答案

我发现其他文章描述了Nexus 5设备中的相同问题,但还没有解决方案。
https://code.google.com/p/android/issues/detail?id=63099
https://code.google.com/p/android/issues/detail?id=62304
我尝试使用seekTo(0),就像在其中一个论坛中建议的那样,但是它没有用,所以我尝试了另一种似乎是针对我的情况的解决方法。

我在Service中使用它,而我的第二个MediaPlayer只是播放一些背景音乐,因此我在第一个ojit_code之后半秒启动了它,并且它起作用了。

new java.util.Timer().schedule(
                new java.util.TimerTask() {
                    @Override
                    public void run() {
                        if (mp2 != null) mp2.start();
                    }
                },
                500
        );

我仍然不知道为什么只有Nexus 5会出现这个问题,但我希望这可以对某些人有所帮助。

关于android - 无法在Nexus 5中同时播放两个MediaPlayer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33425433/

10-09 12:48