我正在寻找一种密码保护方式来启动我的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