MediaPlayer.prepare () throws an IllegalStateException on Android L

I have a code that plays an mp3 file from a resource directory:

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

This code worked fine on every device and every version of Android. Until a preview of Android L. appears, it mediaPlayer.prepare();raises an IllegalStateException on the Nexus 5 running Android L.

The emulator version of Android L works fine, I don’t own Nexus 5, so I can’t say what exactly causes the problem. I think of a descriptor.close()line up prepare(), but not sure.

+4
source share
1 answer
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();
    }
};
0

All Articles