跟进https://stackoverflow.com/a/3448189,实际显示密码屏幕的最佳方式是什么?
我的第一次尝试是使用LockActivity启动SubActivity:
// MainActivity.java
public void onResume() {
super.onResume();
ApplicationState state = ((ApplicationState) getApplication());
if ((new Date().getTime() - state.mLastPause) > 5000) {
// Prompt for password if more than 5 seconds since last pause
Intent intent = new Intent(this, LockActivity.class);
startActivityForResult(intent, UNLOCKED);
}
}
但是,如果LockActivity显示的时间超过5秒,则会导致MainActivity在解锁后再次暂停。
所以,我有一些想法:
Fragments
显示MainActivity内的主屏幕或锁定屏幕。Dialog
显示为锁定屏幕(不是首选)。if ... else
分支来检查密码是否已设置和,MainActivity的暂停时间超过五秒。举个例子,我想实现与Dropbox应用程序相同的行为(使用“密码锁定”选项)。
处理此问题的正确方法是什么?
P.S。我不确定是否应该将此作为原始问题的问题发布,从而挖掘旧线程。我觉得发布一个新问题是一个更清洁的解决方案。
答案 0 :(得分:3)
由于我是那个问另一个问题的人,我不妨告诉你我是如何解决它的。我正在使用一个对话框提示输入密码(我知道你不喜欢这个密码,但它可能对其他人有所帮助),并确保通过输入正确的密码解除它的唯一方法。
MyApplication app = ((MyApplication)getApplication());
if (new Date().getTime() - app.mLastPause > 5000) {
// If more than 5 seconds since last pause, check if password is set and prompt if necessary
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
String password = pref.getString("password", "");
if (password.length() > 0) {
// Prompt for password
MyPasswordDialog dlg = new MyPasswordDialog(this, password);
dlg.setOwnerActivity(this);
dlg.show();
}
}
在OnCreate()
- MyPasswordDialog的方法中,我确保它不可取消
protected void onCreate(Bundle savedInstanceState) {
this.setCancelable(false);
// ...and some other initializations
}