在 MainActivity 上,我使用 MediaPlayer 播放背景音乐。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Music.playBGmusic(this, R.raw.main_music);
}
@Override
protected void onResume() {
super.onResume();
if ( ! Music.isPlaying(this) )
{
Music.playBGmusic(this, R.raw.main_music);
}
}
在 Music.java 中:
public class Music {
private static MediaPlayer mMainSound = null;
public static boolean isPlaying(Context context)
{
if ( mMainSound != null )
{
return mMainSound.isPlaying();
}
return false;
}
public static void playBGmusic(Context context, int resource)
{
if ( mMainSound != null ) mMainSound.release();
mMainSound = MediaPlayer.create(context, resource);
mMainSound.setLooping(true);
mMainSound.start();
}
public static void stopBGmusic(Context context) {
if (mMainSound != null) {
mMainSound.stop();
mMainSound.release();
mMainSound = null;
}
}
}
mMainSound
MediaPlayer 对象在哪里。我的 MainActivity 上有一个按钮,当它被点击时,它会创建一个意图,并且startActivity
那个意图。playBGmusic
这个新活动以另一种声音呼唤。现在,当该新活动调用stopBGmusic()
并 finish()
返回 MainActivity 时,onResume()
MainActivity 将按预期调用,并且它应该main_music
在后台播放。实际发生的是,我只能听到不到一秒钟的音乐,然后就被切断了。我在启动 MediaPlayer 之前尝试过prepare()
,但这仍然不能解决问题。如果有人能为我澄清这个问题,将不胜感激。
也许我还应该提到finish()
新活动中调用的位置,尽管我不确定这是否重要..
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
showDialog(1);
break;
}
return true;
}
@Override
protected Dialog onCreateDialog(int id) { //id is ignored
Dialog dialog = null;
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.return_home)
.setCancelable(true)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.setNegativeButton(R.string.cancel, null);
dialog = builder.create();
return dialog;
}