4

我有从资产目录播放 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(),但不确定。

4

1 回答 1

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();
    }
};
于 2014-08-07T18:30:56.220 回答