HOME ボタンをオーバーライドして、Android の BACK ボタンとまったく同じように動作させたいと考えています。このサイトで同様の質問を見てきましたが、うまくいきません。
現在、ロック画面を作成しており、画面がオフのときはいつでもセキュリティ パスコードを超えるアクティビティを開くことができました。このようにして、ユーザーが画面を再びオンにすることを決定するとすぐに、アクティビティが開かれます。
これは機能しますが、私のBroadcastReceiver
内部Service
は信じられないほど遅いです。電源ボタンを十分に速くクリックすると、アクティビティがすぐに開かれず、ユーザーはアクティビティの前にセキュリティ パスコードを見ることができます (これはアプリの目的を無効にします)。
アクティビティがオンのときに戻るボタンをクリックし、画面をすばやくオフにしてからオンにすると、アクティビティもすばやく開きます。ただし、ホームボタンをクリックすると、アクティビティが再び起動するまでに数秒かかります。私が理解できる限り、これはスタックが各ボタンによってどのように管理されるかに関係しています。
などを使用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);
た。