我使用andengine开发了一个游戏

使用电源Button时遇到问题。如果在玩游戏时按电源Button,则屏幕将关闭,并且onPause()将按预期方式调用。但是,当我再次按下HOME按钮或POWER按钮打开屏幕时,会调用onResume()方法,但是会出现lockscreen

onResume()方法中,我恢复游戏的音乐。

结果显示为lockscreen,但是游戏音乐在后台播放。我不想播放lockscreen中的音乐。请帮我解决这个问题。谢谢

最佳答案

解决方案在这里:Activity handle when screen unlocked

通过注册BroadcastReceiver过滤Intent.ACTION_SCREEN_ONIntent.ACTION_SCREEN_OFFIntent.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按钮时不会调用这些操作(我认为这是一般行为)。

处理HOMEPOWER按钮暂停和恢复音乐的一种简单快捷(但可能不是最好的方法)可以是保留onPauseonResume方法并使用一个简单的布尔标志,例如:

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;
        }
    }
}


希望能帮助到你!

10-01 03:47
查看更多