2010-08-09 91 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