2015-04-07 47 views
0

我有爲我的活動提供背景音樂的Mediaplayer。我想暫停它並在新活動開始時將其重置,並在活動破壞時將其停止。只有在特定活動開始時,MediaPlayer纔會繼續播放

我做了這樣的:

@Override 
protected void onResume() { 
     if(!continiue){ 
      continiue=true; 
    try{ 
     if (m != null) { 
      m=new MediaPlayer(); 
       m.reset(); 
       m = MediaPlayer.create(this, R.raw.menu); 
       m.start(); 
     m.setLooping(true); 
     } 
     else{ 
      m.start(); 
     } 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
    super.onResume(); 
     } 
} 

@Override 
protected void onStop() { 
    try{ 
    if(m!=null){ 
     m.stop(); 
     m.release(); 
    } 
    } 
    catch(Exception e){ 

    } 
    super.onStop(); 
} 
@Override 
protected void onPause() { 
    try{ 
    if(m.isPlaying()){ 
     m.pause(); 
    } 
    } 
    catch(Exception e){ 

    } 
    super.onPause(); 
} 

這工作得很好。現在我想添加另一個活動,但我希望只有在打開此特定活動時才能繼續播放音樂。我怎樣才能做到這一點?

+1

你有else分支當m爲空 – pskink

+0

@pskink固定,感謝 – SpoocyCrep

回答

1

僅爲音樂播放創建一個單獨的類並從「活動」中對其進行規定。事情是這樣的:

import android.content.Context; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.util.Log; 

public class BackgroundMusicPlayer { 

    private static MediaPlayer mp = null; 

    private static int playingResId; 

    public static boolean isSoundTurnedOff; 

    private static boolean isPaused; 

    /** Stop old sound and start new one */ 
    public static void play(Context context, int resIdToPlay) { 

     if (isSoundTurnedOff || context==null) 
      return; 

     if (mp != null && playingResId==resIdToPlay) { 
      if (isPaused) 
       mp.start(); 
      isPaused = false; 
      return; 
     } 

     stop(); 

     Intent i = new Intent("com.android.music.musicservicecommand"); 
     i.putExtra("command", "pause"); 
     context.sendBroadcast(i); 

     playingResId = resIdToPlay; 
     mp = MediaPlayer.create(context, resIdToPlay); 
     if (mp != null) { 
      mp.setLooping(true); 
      mp.start(); 
     } else 
      Log.e("BackgroundMusicPlayer","Cant create MediaPlayer. MediaPlayer.create(context: "+context+", resIdToPlay: "+resIdToPlay+") returns null"); 


    } 

    /** Stop the music */ 
    public static void stop() { 

     if (mp != null) { 
      isPaused = false; 
      playingResId = 0; 
      mp.stop(); 
      mp.release(); 
      mp = null; 
     } 
    } 

    public static void pause() { 

     if (mp != null){ 
      mp.pause(); 
      isPaused = true; 
     } 
    } 

    public static void resume() { 

     if (mp != null && isPaused){ 
      mp.start(); 
      isPaused = false; 
     } 
    } 

} 
+0

哦!我可以撥打服務 - 你說得對,我完全忘記了存在! – SpoocyCrep

+0

等一下,但是更好的是,做你顯示的內容還是創建一項服務?都從我理解的相同的事情.. – SpoocyCrep

+0

我看到沒有必要使用服務,同時控制服務比任何時候隨時隨地可用的4種公共靜態方法更復雜。 – Stan

相關問題