1

我想覆盖 HOME 按钮,使其行为与 Android 中的 BACK 按钮完全相同。我在这个网站上看过类似的问题,但它们不起作用。

我目前正在构建一个锁屏,并在屏幕关闭时设法在安全密码上方打开一个活动。这样,一旦用户决定重新打开屏幕,活动就会打开。

这行得通,但我的BroadcastReceiver内部 aService非常慢。如果我足够快地单击电源按钮,则活动不会立即打开,并且用户能够在我的活动之前看到安全密码(这违背了我的应用程序的目的)。

当活动打开时单击后退按钮,然后快速关闭和打开我的屏幕,活动也会快速打开。但是,如果我单击 HOME 按钮,则该活动需要几秒钟才能再次启动。据我所知,这与每个按钮如何管理堆栈有关。

我已经尝试过使用singleTask等,以便活动不会重新启动,而只是移动到前面。这也不起作用。我剩下要做的就是模仿后退按钮的行为,但这可能吗?

我的接收器和服务是:

public class UpdateService extends Service {

    private boolean screenOn;

    @Override
    public void onCreate() {
        super.onCreate();

        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_ON);
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        registerReceiver(ScreenReceiver, filter);
    }

    private final BroadcastReceiver ScreenReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {

            Intent sendToLockScreen = new Intent("android.intent.category.LAUNCHER");
            sendToLockScreen.setClassName("com.XXXX", "com.XXXX");
            sendToLockScreen.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {

                screenOn = false;
                Log.i("ScreenReceiver", "SCREEN OFF");
                startActivity(sendToLockScreen);

            } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
                screenOn = true;
                Log.i("ScreenReceiver", "SCREEN ON");
            }
        }
    };

在我的锁屏活动下的清单中,我已设置launchModesingleInstance/Task/Top. 我也试过了sendToLockScreen.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

4

0 回答 0