背景音乐会停止或始终重启

时间:2015-05-19 00:45:40

标签: android

我搜索了很多关于背景音乐的内容,到目前为止还没有找到任何实际工作的东西。如果按HOME键,大多数示例都不会停止应用程序的背景音乐。

然后我找到了这个例子:http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

我根据自己的需要重新安排了代码,我只需要流经所有活动的音乐,即使你回到之前的活动,也可以在按下HOME按钮后停止。

这是我的代码:

public class MusicManager {
private static final String TAG = "MusicManager";

private static MediaPlayer mp;

private static int currentMusic = 0;

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 > 0) {
        // already playing some music and not forced to change
        return;
    }

    currentMusic = 1;
    mp = MediaPlayer.create(context, music);
    if (mp != null) {
        if (!mp.isPlaying()) {

            mp.setVolume(100, 100);
            mp.setLooping(true);
            mp.start();
        }
    }

}

public static void pause() {

    if (mp.isPlaying()) {
        mp.pause();
    }
}

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

然后我用于我希望音乐继续播放的每个活动:

private static boolean continueMusic = true // field boolean

    @Override
protected void onPause() {
    super.onPause();
    if (!continueMusic) {
        MusicManager.pause();
    }
}

@Override
protected void onResume() {
    super.onResume();
    continueMusic = false;
    MusicManager.start(this, R.raw.musica);
}

@Override
public boolean onKeyDown(int keycode, KeyEvent e){
    if(keycode == KeyEvent.KEYCODE_BACK){
        continueMusic = true;
    }
    return true;
}

现在,使用此代码,我的音乐仅适用于Main活动(注意我没有在mainactivity中调用onKeyDown,如我给出的链接中所述),如果我从MusicManager类中删除以下代码:

if (!force && currentMusic > 0) {
        // already playing some music and not forced to change
        return;
    }

每次活动都会重新开始播放音乐。关于什么是错的任何想法?

1 个答案:

答案 0 :(得分:0)

我对此并不完全确定,此刻我无法对其进行测试。 但我认为问题在于你的背景。尝试为音乐播放器提供如下应用程序上下文:

context.getApplicationContext();