我有从资源目录中播放mp3文件的代码:
MediaPlayer mediaPlayer = new MediaPlayer();
descriptor = context.getAssets().openFd("beep.mp3");
mediaPlayer.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setVolume(soundLevel, soundLevel);
descriptor.close();
mediaPlayer.setLooping(false);
mediaPlayer.prepare();
mediaPlayer.start();
此代码在每个设备和每个Android版本上运行良好。直到Android L预览发布之后。
mediaPlayer.prepare();
在运行Android L的Nexus 5上抛出IllegalStateException。
Android L的模拟器版本完全正常,我不拥有Nexus 5,因此无法说明导致问题的原因。我在调用descriptor.close()
之前考虑prepare()
行,但不确定。
答案 0 :(得分:0)
public void myBeep() {
try {
if (m.isPlaying()) {
m.stop();
m.release();
m = new MediaPlayer();
}
AssetFileDescriptor descriptor = getAssets().openFd("beep.mp3");
m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
descriptor.close();
m.prepare();
m.setVolume(1f, 1f);
m.setLooping(true);
m.start();
} catch (Exception e) {
e.printStackTrace();
}
};