我的应用程序中有一个密码锁。用户可以在设置中保存密码,并选择只允许用户使用密码进入应用程序。当应用程序启动时,用户会看到一个飞溅的屏幕。在此活动中,如果用户选择启用设置中的密码锁定,我将显示一个请求密码的对话框。
为了确保每当用户尝试使用该应用程序时,都会显示该应用程序被锁定的用户的屏幕,我设置:
android:clearTaskOnLaunch="true"在这个活动的清单中,这是我的应用程序的启动/主要活动。最糟糕的是,它不会让其他用户多任务(没有选择锁定应用程序的用户)离开,而是回到原来的位置。如果和只有当他们已经通过这个活动进入应用程序。但是,如果他们是通过不同的活动进入应用程序的(我有一个小部件可以广播几个不同的意图),那么用户可以多任务,然后回到他们停下来的应用程序中(直到他们使用后退按钮返回应用程序)。
有办法在这里获得这两套功能吗?对于那些想要密码锁的用户,我可以让这个应用始终打开密码锁启动屏幕,并且有良好的多任务处理而不影响其他用户的加载方式吗?
发布于 2011-11-21 00:52:20
不使用clearTaskOnLaunch,您可以在每个活动的'onStart‘中添加一个条件语句。
示例:
if (pref.getBoolean("requiresPassword", false)){
startActivity(new Intent(context, SplashScreen.class));
}为了使代码更易于移植并更容易在每个活动中放置,我创建了一个包含多个方法的类,例如:
public class M {
public static void check(final Context context){
//do the shared prefs getting and startActivity from here.
}
}然后在你的onStart中,每一个Activity,你要做的就是M.check(this);
编辑:
作为科学神童,上述因素将导致无穷大的循环。我没想过这个。
我实际上要做的是创建一个对话框弹出请求密码,如下所示:
public static void requestPassword(final Context context){
final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
final Activity activity = (Activity)context;
boolean requestPassword = pref.getBoolean("appLock", false);
// Log.i(tag, String.valueOf(requestPassword));
if (!requestPassword){
return;
}
final EditText myPass2 = new EditText(context);
new AlertDialog.Builder(context)
.setTitle("Enter Password")
.setView(myPass2)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
String secPass = pref.getString("secPassword", "password");
String entPass = myPass2.getText().toString();
if (entPass.equals(secPass)){
myPass2.setText("");
saveTime(context);
} else {
Toast.makeText((Activity)context, "Incorrect Password", Toast.LENGTH_SHORT).show();
myPass2.setText("");
activity.finish();
}
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
myPass2.setText("");
activity.finish();
}
})
.setCancelable(true)
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
myPass2.setText("");
activity.finish();
}
})
.show();
}发布于 2011-11-21 01:37:36
这可能对你有用:
公共类MyActivity {公共静态类锁定扩展MyActivity {}公共静态类NoLock MyActivity {} // .}
clearTaskOnLaunch标志设置为真,另一个类设置为false:
MyActivity.Locked或MyActivity.NoLock。如果活动以前是从启动程序(在清单条目中有
onCreate()方法中启动哪个版本的MyActivity,如下所示:公共类欢迎扩展活动{ @Override void onCreate(Bundle冰柱){super.onCreate(冰柱);if (mPasswordLocked) {startActivity(新意图(this,MyActivity.Locked.class));}startActivity(新意图(this,MyActivity.NoLock.class));} finish();}
https://stackoverflow.com/questions/8205965
复制相似问题