2010-08-09 88 views
8

我正在尋找一種密碼保護方式來啓動我的android應用程序,即啓動/恢復屬於我的apk包的活動時,將顯示密碼對話框。密碼保護android應用程序的啓動

我試過一些方法(延伸application class等),但似乎沒有工作。它們不會在UI線程上運行,或者每次啓動/恢復時都不會顯示該對話框。

//米

+0

應用程序類是要走的路,請張貼您嘗試過的方式/代碼。因爲它可能有些問題。 – Pentium10 2010-08-09 08:56:57

回答

13

所以這是我堅持的解決方案。在我的應用程序類中,我存儲一個長時間的變量,其中包含上次暫停活動時的系統時間。

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 
    } 
} 
+0

感謝這個解決方案,我認爲有一點缺失:'onResume'函數中的代碼也應該在'onStart'函數中執行。爲了避免一個惱人的情況,我不得不添加這個部分:一旦應用程序在乾淨退出後重新打開,鎖定不會顯示。 – 2013-08-23 07:43:52

+1

@YoannHercouet我不太確定這是必要的。從我所瞭解的onResume方法將在onStart方法啓動之後調用。從Android文檔中查看此插圖:https://developer.android.com/images/activity_lifecycle.png – 2013-08-23 16:30:35

+1

也可以使用所需的Overidden方法創建LockActivity類,而不是修改所有活動的onResume和onPause,並使所有你的活動擴展了這個類。 – 2014-05-19 07:51:48

3

子類應用程序,並設置有一個變量對下一次的東西是否發生在你的應用程序,你應該提示對話框與否。

在您的活動,服務等...使用您收到的上下文,如果var設置爲顯示對話框,請從您的Activity代碼(即UI線程)顯示對話框中獲取您的Application。你可能會把它放在你的onResume代碼中。

在onPause中,設置變量以便下次顯示它。在onResume中,將其設置爲false。

+0

感謝您的回答。有一件事...雖然似乎沒有應用程序範圍內的onPause和onResume,這意味着我必須在每個活動中設置變量。這會在每次啓動/恢復新活動時導致密碼對話框顯示。只需在應用程序類的onCreate中設置變量,只有當應用程序是冷啓動的,可能不會太頻繁。糾正我,如果我錯了:-) – 2010-08-10 05:30:47

+0

你必須使它更聰明一點。有一個計數器而不是布爾值。每次發生onResume時,都要增加它,每次發生onPause時,都要減少它。如果其活動啓動時爲0,則顯示密碼。 – Moncader 2010-08-10 05:41:24

+0

好的,現在我已經實現了您的解決方案,並且從活動的每個開始/恢復(即使從另一個活動調用時)都會顯示密碼提示,但它仍然不起作用。發生這種情況是因爲調用活動的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