我的應用程序有敏感的用戶信息,我們需要實現一個密碼屏幕,每當用戶打開的應用程序來顯示。 這裏是我讀this post後嘗試了兩種方法。爲Android應用程序
使用一個靜態變量,並在每個活動的
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
時間啓動的過程中每個活動的OnStart方法檢查它這將始終返回true是否有任何其他的辦法,當用戶打開應用程序時,我可以採取顯示密碼?即使用戶單擊主屏幕以退出應用程序,然後從最近的應用程序返回到應用程序,也應該顯示它。
不知道,但如果ü可以做一個服務,每說1或2秒致電isapponforeground和變量更改爲真/假,並在簡歷的活動,只需檢查真/假 – Amit
對於#1,什麼關於存儲在* private * SharedPreference中的加密的ONE TIME USE會話/ cookie類型字符串 - 您可以將超時設置爲幾分鐘,這可以允許用戶離開並返回到您的應用程序。 – pjco
另一種可能的解決方案是成爲設備管理員使用設備鎖而不是自定義應用程序鎖定。這可能會更好或更糟,具體取決於你如何看待它。如果您有很多需要安全性的應用程序,那麼對於所有應用程序而言都是單一鎖定。如果你只有一個應用程序,用戶會因爲你的應用程序迫使他們鎖定屏幕而感到惱火。 –