我搜索了很多关于背景音乐的内容,到目前为止还没有找到任何实际工作的东西。如果按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;
}
每次活动都会重新开始播放音乐。关于什么是错的任何想法?
答案 0 :(得分:0)
我对此并不完全确定,此刻我无法对其进行测试。 但我认为问题在于你的背景。尝试为音乐播放器提供如下应用程序上下文:
context.getApplicationContext();