Android MediaPlayer错误(在状态1中调用启动;错误(-38,0);错误(-38,0))

时间:2014-04-24 18:19:25

标签: java android android-mediaplayer

我为SoundManagement创建了一个包,其中一个类扩展了MediaPlayer。我希望全局控制这个变量。这是我的代码:

package soundmanagement;

import android.content.Context;

import android.media.MediaPlayer;

import java.io.IOException;

public class MusicManager extends MediaPlayer {

    public static MediaPlayer mediaPlayer = new MediaPlayer();

    public void MusicManager() {
    }

    public static MediaPlayer create(Context context, int musicID) {
        if (mediaPlayer != null) {
            mediaPlayer.release();
        }
        mediaPlayer.create(context, musicID);
        try {
            mediaPlayer.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return mediaPlayer.create(context, musicID);
    }

    public void prepare() {
        try {
            mediaPlayer.prepare();
            super.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void start() {
        if (mediaPlayer != null) {
            mediaPlayer.start();
        }
        super.start();
    }

    public void pause() {
        mediaPlayer.pause();
        super.pause();
    }

    public void stop() {
        super.stop();
        mediaPlayer.release();
    }

    public void release() {
        mediaPlayer.release();
        super.release();
    }

    public boolean isPlaying(boolean isPlaying) {
        super.isPlaying();
        return isPlaying;
    }

    public void setLooping(boolean setLoop) {
        mediaPlayer.setLooping(setLoop);
        super.setLooping(setLoop);
    }
}

在我的MainActivity.class中,在onCreate()中,我所做的就是在onCreate()中编写这段代码:

MusicManager.mediaPlayer.create(MainActivity.this, R.raw.riseofcc);
MusicManager.mediaPlayer.start();

应用程序编译并运行良好,一旦启动就不播放音乐。

1 个答案:

答案 0 :(得分:1)

你对MediaPlayer采取了一种好奇的方法,但有一件事突然出现在我身上:

public static MediaPlayer create(Context context, int musicID) {
        if (mediaPlayer != null) {
            mediaPlayer.release();
        }
        mediaPlayer.create(context, musicID);
        try {
            mediaPlayer.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return mediaPlayer.create(context, musicID);
    }

您调用mediaPlayer.create(),然后调用.prepare(),然后再次创建(...)?

此外,create是一个静态方法,因此它应该被称为MediaPlayer.create,你应该保持对它的引用。当您调用prepare()时,您正在对尚未创建的MediaPlayer对象调用prepare()。

编辑:如果您想保留此方法,请相应地修改它:

public static MediaPlayer create(Context context, int musicID) {
        if (mediaPlayer != null) {
            mediaPlayer.release();
        }
        mediaPlayer = MediaPlayer.create(context, musicID);
        try {
            mediaPlayer.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return mediaPlayer;
    }