我的应用是一款专为 1 至 3 岁儿童设计的游戏(我自己有两个在这个范围内!)
我试图尊重开发生命周期,遵循应用程序设计指南,让体验从头到尾,完全符合用户(父母和小孩)的期望。
游戏开始时,我通过实现 AudioManager.OnAudioFocusChangeListener 的服务启动(和平的)背景音乐(根据焦点启动、更改音量级别、关闭等),在活动之间切换时持续进行游戏而不会中断,但是可以选择在每个游戏屏幕上以小按钮的形式打开和关闭。
一切都按我的预期工作,除非我按下主页按钮以 Android 方式退出应用程序(即没有退出按钮/选项)。音乐无限期地继续播放。我的开关有什么可以改变的吗(见下面的代码)?我不能告诉服务在暂停时停止,因为这会破坏活动之间的无缝背景音乐。
这是一个违背典型应用程序设计的案例,可以创建一个退出选项(当一个可爱的小动物按下家时提示“现在说再见?”以及退出和取消按钮)?还有其他选择吗?
与往常一样,感谢您在我跌跌撞撞时指导我!=)
@Override
public void onAudioFocusChange(int focusChange) {
// TODO Auto-generated method stub
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
Log.v(TAG, "AUDIOFOCUS_GAIN");
// resume playback
if (mp == null) {mp = MediaPlayer.create(this, R.raw.backgroundmusic); mp.start(); mp.setLooping(true);}
else if (!mp.isPlaying()) mp.start();
mp.setVolume(1.0f, 1.0f);
break;
case AudioManager.AUDIOFOCUS_LOSS:
Log.v(TAG, "AUDIOFOCUS_LOSS");
// Lost focus for an unbounded amount of time: stop playback and release media player
if (mp.isPlaying())mp.stop();
mp.release();
mp = null;
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
Log.v(TAG, "AUDIOFOCUS_LOSS_TRANSIENT");
// Lost focus for a short time, but we have to stop
// playback. We don't release the media player because playback
// is likely to resume
if (mp.isPlaying()) mp.pause();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
Log.v(TAG, "AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
// Lost focus for a short time, but it's ok to keep playing
// at an attenuated level
if (mp.isPlaying()) mp.setVolume(0.1f, 0.1f);
break;
}
}