【发布时间】:2013-01-31 10:40:50
【问题描述】:
在 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 时,MainActivity 的onResume() 将按预期调用,它应该在后台播放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;
}
【问题讨论】:
-
音乐是服务还是简单的课程?由于您正在播放背景,我假设它是一项服务。
-
能否请您发布类名的顶部,以便我们可以看到您使用的接口和超类?
-
是的,它只是一个简单的类。我编辑我的代码只是为了展示。我想我将不得不改变它
-
要记住的一点是 onResume 总是会在 onCreate 之后被调用,所以你只需要设置媒体播放器在 onResume 中播放。
-
是的,这是真的。我本来可以放: else { Music.playBGmusic(this, R.raw.main_music); } 在 onResume() 中。虽然这并不能解释为什么它会被切断。
标签: android