我是Android的新手,所以我有一个问题。在Android中,我想在我的音乐播放器启动时立即播放背景音乐,并让它继续播放,即使活动从一个改变到另一个。我尝试过以下代码:
MediaPlayer music = MediaPlayer.create(MainActivity.this, R.drawable.bgscore);
music.start();
但是,当用户关闭应用程序时,声音应该会停止,但它没有。我如何实现这一点?
发布于 2013-09-18 20:48:51
创建一个单独的类来处理多个条件
import android.content.Context;
import android.media.MediaPlayer;
import android.util.Log;
public class MusicManager {
static final int MUSIC_PREVIOUS = -1;
private static final String TAG = "MusicManager";
static MediaPlayer mp;
private static int currentMusic = -1;
private static int previousMusic = -1;
public static void start(Context context, int music) {
start(context, music, false);
}
public static void start(Context context, int music, boolean force) {
if (!force && currentMusic > -1) {
// already playing some music and not forced to change
return;
}
if (music == MUSIC_PREVIOUS) {
Log.d(TAG, "Using previous music [" + previousMusic + "]");
music = previousMusic;
}
if (currentMusic == music) {
// already playing this music
return;
}
if (currentMusic != -1) {
previousMusic = currentMusic;
Log.d(TAG, "Previous music was [" + previousMusic + "]");
// playing some other music, pause it and change
pause();
}
currentMusic = music;
Log.d(TAG, "Current music is now [" + currentMusic + "]");
if (mp != null) {
if (!mp.isPlaying()) {
mp.start();
}
} else {
mp = MediaPlayer.create(context, R.raw.backGroundMusic); //Ur BackGround Music
}
if (mp == null) {
Log.e(TAG, "player was not created successfully");
} else {
try {
mp.setLooping(true);
mp.start();
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
}
}
public static void pause() {
if (mp != null) {
if (mp.isPlaying()) {
mp.pause();
}
}
// previousMusic should always be something valid
if (currentMusic != -1) {
{
previousMusic = currentMusic;
Log.d(TAG, "Previous music was [" + previousMusic + "]");
}
currentMusic = -1;
Log.d(TAG, "Current music is now [" + currentMusic + "]");
}
}
public static void release() {
Log.d(TAG, "Releasing media players");
try {
if (mp != null) {
if (mp.isPlaying()) {
mp.stop();
}
mp.release();
}
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
if (currentMusic != -1) {
previousMusic = currentMusic;
Log.d(TAG, "Previous music was [" + previousMusic + "]");
}
currentMusic = -1;
Log.d(TAG, "Current music is now [" + currentMusic + "]");
}
}
然后在您的MainActivity
中定义一个全局布尔变量,并在setContentView(....)之前将其设置为true
。在onCreate()
中,即
boolean continueBGMusic;
....
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
continueBGMusic=true;
setContentView(R.layout.activity_main);
.....
}
然后将onPause()
更新为
public void onPause()
{
super.onPause();
if(!continueBGMusic)
MusicManager.pause();
}
和onResume()
as
public void onResume()
{
super.onResume();
continueBGMusic=false;
MusicManager.start(this,R.raw.backGroundMusic);
}
使用布尔变量和两个方法更新所有的三个活动。
发布于 2015-05-29 07:25:26
如果您没有太多的活动,可以通过在想要播放音乐的活动中添加布尔标志来管理此任务。
当您停止一项活动时,这些标志将显示其他活动是否需要您的MediaPlayer
所以在你的主要活动中:
public class MainActivity extends Activity {
static MediaPlayer introPlayer;
static boolean sActive;
@Override
protected void onResume() {
// starting the player if it is not playing
if (!introPlayer.isPlaying()) {
introPlayer.start();
introPlayer.setLooping(true);
}
// true when activity is active
sActive = true;
super.onResume();
}
@Override
protected void onPause() {
sActive = false;
super.onPause();
}
@Override
protected void onStop() {
// before stoping mediaplayer checking whether it is not used by other activities
if (introPlayer.isPlaying()
&& !(Activity2.sActive || Activity3.sActive)) {
introPlayer.pause();
}
super.onStop();
}
}
其他活动:
public class Activity2 extends Activity {
static boolean sActive;
@Override
protected void onPause() {
sActive = false;
super.onPause();
}
@Override
protected void onStop() {
// pausing the player in case of exiting from the app
if (MainActivity.introPlayer.isPlaying() && !(MainActivity.sActive || Activity3.sActive)) {
MainActivity.introPlayer.pause();
}
super.onStop();
}
@Override
protected void onResume() {
sActive = true;
if (!MainActivity.introPlayer.isPlaying()) {
MainActivity.introPlayer.start();
MainActivity.introPlayer.setLooping(true);
}
super.onResume();
}
}
和
public class Activity3 extends Activity {
static boolean sActive;
@Override
protected void onPause() {
sActive = false;
super.onPause();
}
@Override
protected void onStop() {
// pausing the player in case of exiting from the app
if (MainActivity.introPlayer.isPlaying() && !(MainActivity.sActive || Activity2.sActive)) {
MainActivity.introPlayer.pause();
}
super.onStop();
}
@Override
protected void onResume() {
sActive = true;
if (!MainActivity.introPlayer.isPlaying()) {
MainActivity.introPlayer.start();
MainActivity.introPlayer.setLooping(true);
}
super.onResume();
}
}
发布于 2013-09-18 19:44:19
尝尝这个
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK ) {
music.stop();
return true;
}
return super.onKeyDown(keyCode, event);
}
否则,如果你有任何单独的按钮操作来关闭应用程序,你可以调用music.stop();
https://stackoverflow.com/questions/18871288
复制相似问题