我使用andengine
开发了一个游戏
使用电源Button
时遇到问题。如果在玩游戏时按电源Button
,则屏幕将关闭,并且onPause()
将按预期方式调用。但是,当我再次按下HOME
按钮或POWER
按钮打开屏幕时,会调用onResume()
方法,但是会出现lockscreen
。
在onResume()
方法中,我恢复游戏的音乐。
结果显示为lockscreen
,但是游戏音乐在后台播放。我不想播放lockscreen
中的音乐。请帮我解决这个问题。谢谢
最佳答案
解决方案在这里:Activity handle when screen unlocked
通过注册BroadcastReceiver
过滤Intent.ACTION_SCREEN_ON
,Intent.ACTION_SCREEN_OFF
和Intent.ACTION_SCREEN_PRESENT
操作,您将能够处理以下三种情况:Intent.ACTION_SCREEN_OFF
:按下POWER
按钮并且屏幕变黑时。Intent.ACTION_SCREEN_ON
:再次按下POWER
按钮并显示锁屏时。Intent.ACTION_SCREEN_PRESENT
:当您通过locksreen并重新进入游戏时。
但是,就我而言(在Froyo 2.2上使用Galaxy S GT I9000)在处理HOME
按钮时不会调用这些操作(我认为这是一般行为)。
处理HOME
和POWER
按钮暂停和恢复音乐的一种简单快捷(但可能不是最好的方法)可以是保留onPause
和onResume
方法并使用一个简单的布尔标志,例如:
private boolean mPowerButton = false;
@Override
public void onPause() {
super.onPause();
// Pause your music
Log.d("Game activity", "Music paused");
}
@Override
public void onResume() {
super.onResume();
if (!this.mPowerButton) {
// Resume your music
Log.d("Game activity", "[HOME button] Music resumed inside onResume");
}
}
public class receiverScreen extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
// This is the lockscreen, onResume has been already called at this
// step but the mPowerButton boolean prevented the resumption of music
}
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
LevelActivity.this.mPowerButton = true;
}
if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
// Resume your music
Log.d("Game activity", "[POWER button] Music resumed inside ACTION_USER_PRESENT action");
LevelActivity.this.mPowerButton = false;
}
}
}
希望能帮助到你!