2015-10-07 135 views
1

我想在Android上使用Services在簡單的遊戲中播放背景音樂。在簡單的遊戲中在Android中播放背景音樂

使用鏈接:Android Life Cycles

但是這代碼不能正常工作,onResumeActivity, onPauseActivity被稱爲但是音樂保存在後臺運行,即使onPauseActivity方法被調用。

當應用程序處於後臺時,音樂會繼續播放。

有沒有其他的方式來播放Android應用/遊戲中的背景音樂?

回答

0
public class SoundGameBaseActivity extends Activity { 
public static boolean isSoundPaused = false; 





public static MediaPlayer mp; 

protected static final String TAG = SoundGameBaseActivity.class.getName(); 

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 


    playMusic(); 
} 

public static boolean isAppWentToBg = false; 

public static boolean isWindowFocused = false; 

public static boolean isMenuOpened = false; 

public static boolean isBackPressed = false; 

@Override 
protected void onStart() { 
    Log.d(TAG, "onStart isAppWentToBg " + isAppWentToBg); 

    applicationWillEnterForeground(); 

    super.onStart(); 
} 

private void applicationWillEnterForeground() { 
    if (isAppWentToBg) { 
     //Google Analytics 
     MyApp.getInstance().trackScreenView("ApplicationActivated"); 
     isAppWentToBg = false; 
    // Toast.makeText(getApplicationContext(), "App is in foreground", 
    //   Toast.LENGTH_SHORT).show(); 
     playMusic(); 
    } 
} 

@Override 
protected void onStop() { 
    super.onStop(); 

    Log.d(TAG, "onStop "); 


     applicationdidenterbackground(); 


} 

public void applicationdidenterbackground() { 

    if (!isWindowFocused) { 

     isAppWentToBg = true; 
     Toast.makeText(getApplicationContext(), 
       "App is Going to Background", Toast.LENGTH_SHORT).show(); 

     stopMusic(); 

    } 
} 

public void TurnOnMusicAgain() { 

} 

void playMusic() { 





     if (mp == null) { 
      mp = MediaPlayer.create(this, R.raw.background1); 
      // mp.prepare(); 
      mp.start(); 
      mp.setLooping(true); 

     } else { 
      if (mp.isPlaying()) { 

      } else { 
       Log.e("", "coming back"); 
       mp.start(); 
      } 
     } 

} 

void stopMusic() { 
    if (mp != null) 

     mp.pause(); 
} 

@Override 
public void onBackPressed() { 

    if (this instanceof StartScreen) { 

    } else { 
     isBackPressed = true; 
    } 

    Log.d(TAG, 
      "onBackPressed " + isBackPressed + "" 
        + this.getLocalClassName()); 
    super.onBackPressed(); 
} 

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 

    isWindowFocused = hasFocus; 
    Log.e("Is Window Focus", "" + isWindowFocused); 
    if (isBackPressed && !hasFocus) { 
     isBackPressed = false; 
     isWindowFocused = true; 
    } 

    super.onWindowFocusChanged(hasFocus); 
} 

}

0

我認爲這段代碼適合你。添加這個類(包含在你的活動類中)。

public class BackgroundMusic extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     MediaPlayer backgroundmusic = MediaPlayer.create(YourActivity.this, R.raw.yourbackgroundmusic); 
     player.setVolume(100,100); 
     player.setLooping(true); 
     player.start(); 

     return null; 
    } 

} 

,創造它

BackgroundMusic bm = new BackgroundMusic(); 

上的onResume方法:

public void onResume() { 
    super.onResume(); 
    bm.execute(null); 
} 

而且在onPause方法:

public void onPause() { 
    super.onPause(); 
    bm.cancel(true); 
} 

希望這有助於!

+0

如果我們從一個活動移動到另一個活動的onPause就會被調用。 –

+0

你試過了嗎? – AndroidLTG

+0

是的,我之前試過,它暫停了音樂,一旦我從一個活動轉移到另一個。 –