我有一个Android应用程序,其中我有4个活动,A,B,C和D
在活动A中是我的登录屏幕
如果用户在B,C或D中,如果用户按下B,C或D的主页按钮,应用程序将关闭,默认情况下,android主屏幕将会出现,如果他们再次打开该应用程序,那些只有那个Activity从他们按Home键的位置打开。
我希望他们重定向到登录页面。
注意:我不能使用onpause()和onstop()因为我正在从一个活动连续移动到另一个活动。
我该怎么做?
答案 0 :(得分:1)
使用 机器人:noHistory = “真” 活动b,c和d的清单中的标志。当用户按下主页按钮时,这将强制应用程序显示其中一个活动可见时的主要活动。
答案 1 :(得分:0)
在活动暂停时写下此代码
ActivityManager activityManager = (ActivityManager)getBaseContext()
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> runningTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
String packageLaunched = runningTasks.get(0).baseActivity.getPackageName();
if (!packageLaunched.contains("yourPackageName")) {
///// some constant == true
}
这会让你知道你搬出了应用程序!
在那里你将保持一个恒定的旗帜。
然后onResume你应该再次检查标志,如果它是真的(即用户按下主页按钮)将用户重新指向你想要的任何页面。
我希望你明白这一点。
干杯:)
答案 2 :(得分:0)
以下是一些可能的解决方法。 选项1:
一个选项可能是将ActivityStateManager.xml文件保存在您的应用程序文件夹中,您将在启动应用程序时阅读该文件夹。在此xml文件中,您可以保留基本属性StartLoginAcivity = true / false。
创建一个MainActivity,它将被我们的所有活动扩展,B,C,D除外,并覆盖主页按钮并将ActivityStateManager.xml中的StartLoginAcivity属性设置为false。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_HOME)) {
// set StartLoginAcivity property in ActivityStateManager.xml to true
return false;
}
return super.onKeyDown(keyCode, event);
}
覆盖活动B,C,D(或将通过这些活动扩展的RequireLoginActivity中)的主页按钮,并将ActivityStateManager.xml中的StartLoginAcivity属性设置为true。
启动应用程序时,请阅读ActivityStateManager.xml,如果StartLoginAcivity = true,请打开LoginActivity。
选项2:
覆盖活动B,C,D(或将通过这些活动扩展的RequireLoginActivity)中的主页按钮,并强制关闭app How to close an android application?。启动应用时,它将打开您的默认主要活动
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_HOME)) {
// force close app
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory( Intent.CATEGORY_HOME );
homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(homeIntent);
}
return true;
//return super.onKeyDown(keyCode, event);
}