无法在 Nexus 5 中同时播放两个 MediaPlayer
Unable to play two MediaPlayer at same time in Nexus 5
我正在尝试在服务中使用两个 MediaPlayers
在后台播放一些音频。如果我只想播放一个 mp3,一切正常,但如果我尝试同时播放两个,使用 MediaPlayer
的两个实例,只有最后一个有效。这很奇怪,因为它可以在模拟器和某些设备上运行,但我无法让它在 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
只是为了播放一些背景音乐,所以我在第一个后半秒开始播放并且它起作用了。
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
if (mp2 != null) mp2.start();
}
},
500
);
我仍然不知道为什么我只在 Nexus 5 中遇到这个问题,但我希望这可能对某些人有所帮助。
我正在尝试在服务中使用两个 MediaPlayers
在后台播放一些音频。如果我只想播放一个 mp3,一切正常,但如果我尝试同时播放两个,使用 MediaPlayer
的两个实例,只有最后一个有效。这很奇怪,因为它可以在模拟器和某些设备上运行,但我无法让它在 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
只是为了播放一些背景音乐,所以我在第一个后半秒开始播放并且它起作用了。
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
if (mp2 != null) mp2.start();
}
},
500
);
我仍然不知道为什么我只在 Nexus 5 中遇到这个问题,但我希望这可能对某些人有所帮助。