2014-04-24 55 views
1

我爲SoundManagement創建了一個包,其中一個類擴展了MediaPlayer。我希望全球控制這個變量。這是我的代碼:Android MediaPlayer錯誤(開始在狀態1中調用;錯誤(-38,0);錯誤(-38,0))

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

應用程序編譯並運行正常,只是一旦啓動就沒有音樂播放。

+0

如果你的類擴展'MediaPlayer',那麼'MusicManager'對象**是一個**'MediaPlayer'。那麼爲什麼你要創建一個新的'MediaPlayer',以便你有兩個'MediaPlayer's?你確定這是你想要的嗎?也許這是你想要的,我不明白你的代碼,但我以前看過那個錯誤。 – ajb

+0

@ajb ...我認爲問題在於MediaPlayer沒有公開大量的內部工作,並將很多方法標記爲final。 ...但是,它仍然不是最佳方法。 – ajacian81

+0

對不起,我只是想成爲一個在整個應用程序中是全球性的媒體播放器。我將有多個活動操縱它(暫停,開始,創建),我需要它在一個單獨的格式。我曾嘗試在每個活動中使用單個MediaPlayer,並且事情變得很快。 – Azurai

回答

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(),然後。準備(),然後創建( ...)呢?

另外,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; 
    } 
+0

它告訴我需要返回,並且我試過返回:return mediaPlayer; || return mediaPlayer.create(...);此代碼是我在此處詢問之前的最後一次嘗試之一。我明白你在說什麼,我會盡力重新做。 – Azurai

+0

我爲你更新了我的答案。 – ajacian81

+0

謝謝,我很感激!在任何其他時間,我必須擴展一個API類,對於超類中的方法,最好使用如所述的構造函數?:mediaPlayer = MediaPlayer.create(..); – Azurai

相關問題