私のアプリケーションには機密性の高いユーザー情報が含まれており、ユーザーがアプリケーションを開くたびに表示されるパスコード画面を実装する必要があります。この投稿を読んだ後に試した 2 つのアプローチを次に示します。
静的変数を使用して各アクティビティでリセットし
onStop()
、各アクティビティで再度チェックしてonStart()
、時間が最小しきい値 (1 ~ 2 秒) を超えた場合はパスコード画面を表示します。このアプローチの問題は、アプリケーションがインテントを使用してカメラやバーコード スキャナーを呼び出すこともあり、ユーザーがこれらの外部アプリで長時間過ごす可能性があることです。この場合、しきい値を上げることができますが、計算が複雑になり、あまり良い解決策ではありません。この方法を使用して、別のアプローチを試みました。
protected boolean isAppOnForeground(final Context context) { List<RunningAppProcessInfo> appProcesses = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses(); if (appProcesses == null) { return false; } final String packageName = context.getPackageName(); for (RunningAppProcessInfo appProcess : appProcesses) { if ((appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) && appProcess.processName.equals(packageName)) { return true; } } return false; }
ただし、各アクティビティの onStart メソッドでチェックすると、これは常に true を返します。これは、プロセスが onStart にある時点ですでに開始されているためです。
ユーザーがアプリケーションを開いたときにパスコードを表示するために使用できる他の方法はありますか? ユーザーがホーム画面をクリックしてアプリを終了し、最近のアプリからアプリに戻った場合でも表示される必要があります。