簡體   English   中英

Android MediaPlayer錯誤(在狀態1中開始調用;錯誤(-38,0);錯誤(-38,0))

[英]Android MediaPlayer Error( start called in state 1; error (-38, 0); Error (-38,0))

我已經為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();

該應用程序可以編譯並正常運行,一旦啟動就不會播放音樂。

您對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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM