我想覆盖 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");
}
}
};
在我的锁屏活动下的清单中,我已设置launchMode
为singleInstance/Task/Top
. 我也试过了sendToLockScreen.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
。