我正在尋找一種密碼保護方式來啓動我的android應用程序,即啓動/恢復屬於我的apk包的活動時,將顯示密碼對話框。密碼保護android應用程序的啓動
我試過一些方法(延伸application class等),但似乎沒有工作。它們不會在UI線程上運行,或者每次啓動/恢復時都不會顯示該對話框。
//米
我正在尋找一種密碼保護方式來啓動我的android應用程序,即啓動/恢復屬於我的apk包的活動時,將顯示密碼對話框。密碼保護android應用程序的啓動
我試過一些方法(延伸application class等),但似乎沒有工作。它們不會在UI線程上運行,或者每次啓動/恢復時都不會顯示該對話框。
//米
所以這是我堅持的解決方案。在我的應用程序類中,我存儲一個長時間的變量,其中包含上次暫停活動時的系統時間。
import android.app.Application;
public class MyApplication extends Application {
public long mLastPause;
@Override
public void onCreate() {
super.onCreate();
mLastPause = 0;
Log.w("Application","Launch");
}
}
在每個onPause方法中,我將此值更新爲當前時間。
@Override
public void onPause() {
super.onPause();
((MyApplication)this.getApplication()).mLastPause = System.currentTimeMillis();
}
而在每一個onResume我比較它與當前時間。如果經過一段時間(目前5秒),我的密碼提示將會顯示。
@Override
public void onResume() {
super.onResume();
MyApplication app = ((MyApplication)act.getApplication());
if (System.currentTimeMillis() - app.mLastPause > 5000) {
// If more than 5 seconds since last pause, prompt for password
}
}
感謝這個解決方案,我認爲有一點缺失:'onResume'函數中的代碼也應該在'onStart'函數中執行。爲了避免一個惱人的情況,我不得不添加這個部分:一旦應用程序在乾淨退出後重新打開,鎖定不會顯示。 – 2013-08-23 07:43:52
@YoannHercouet我不太確定這是必要的。從我所瞭解的onResume方法將在onStart方法啓動之後調用。從Android文檔中查看此插圖:https://developer.android.com/images/activity_lifecycle.png – 2013-08-23 16:30:35
也可以使用所需的Overidden方法創建LockActivity類,而不是修改所有活動的onResume和onPause,並使所有你的活動擴展了這個類。 – 2014-05-19 07:51:48
子類應用程序,並設置有一個變量對下一次的東西是否發生在你的應用程序,你應該提示對話框與否。
在您的活動,服務等...使用您收到的上下文,如果var設置爲顯示對話框,請從您的Activity代碼(即UI線程)顯示對話框中獲取您的Application。你可能會把它放在你的onResume代碼中。
在onPause中,設置變量以便下次顯示它。在onResume中,將其設置爲false。
感謝您的回答。有一件事...雖然似乎沒有應用程序範圍內的onPause和onResume,這意味着我必須在每個活動中設置變量。這會在每次啓動/恢復新活動時導致密碼對話框顯示。只需在應用程序類的onCreate中設置變量,只有當應用程序是冷啓動的,可能不會太頻繁。糾正我,如果我錯了:-) – 2010-08-10 05:30:47
你必須使它更聰明一點。有一個計數器而不是布爾值。每次發生onResume時,都要增加它,每次發生onPause時,都要減少它。如果其活動啓動時爲0,則顯示密碼。 – Moncader 2010-08-10 05:41:24
好的,現在我已經實現了您的解決方案,並且從活動的每個開始/恢復(即使從另一個活動調用時)都會顯示密碼提示,但它仍然不起作用。發生這種情況是因爲調用活動的onPause在啓動onResume之前執行,這意味着在活動啓動時變量始終爲0。 onPause: ((MyApplication)this.getApplication())。mActivityCounter--; onResume: MyApplication app =((MyApplication)act.getApplication()); if(app.mActivityCounter == 0){ //做密碼檢查 } app.mActivityCounter ++; 有什麼想法? – 2010-08-10 07:01:35
應用程序類是要走的路,請張貼您嘗試過的方式/代碼。因爲它可能有些問題。 – Pentium10 2010-08-09 08:56:57