隐藏登录活动

7

我有一个LoginActivity,它会检查SharedPreferences中的登录信息,然后重定向到HomeActivity和其他活动。我在每个活动上都放置了菜单项“注销”,并在注销按钮上使用了以下代码。

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

如何隐藏登录活动,以便用户从主屏幕按返回按钮时关闭应用程序。

例如,当我打开应用程序时,它会显示主屏幕,当我正常按下返回按钮时,应该关闭应用程序。但在我的情况下,它会带我到登录屏幕,这是检查用户凭据的第一个屏幕。

我不能结束登录活动,否则该解决方案将无效。

我是Android新手,请建议解决此问题的方法。


3
在清单文件中的登录活动中使用android:noHistory="true"。 - Anand Tiwari
我尝试过那样做,但它会从堆栈中移除活动。 - SkyWalker
3个回答

6

你应该在主界面的返回键功能中尝试这个方法:

onBackpress(){
 Intent intent = new Intent(mContext, LoginActivity.class);
 intent.putExtra("FLAG", 0);
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
 intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
 startActivity(intent);
}

在您的登录活动中,只需执行以下操作:
 onNewIntent(Intent intent){
   int i = intent.getIntExtra("FLAG", 0);

   if(i == 0) 
      finish();

 }

请记得在manifest文件中为该活动设置launchMode属性,值应该为singleTop。


在 putIntExtra 上显示错误 "The method putIntExtra(String, int) is undefined for the type Intent"。 并且在 getData 上显示错误 "getData cannot be resolved or is not a field"。 - SkyWalker
谢谢,太棒了!你能简要地解释一下我们做了什么吗? - SkyWalker
1
使用SINGLE_TOP启动活动时,可以从后台堆栈中启动,但是如果使用此意图,则会调用启动活动的onNewIntent()方法,在其中只需调用finish()即可。 - Anand Tiwari
当我改变屏幕方向时,解决方案就不能工作了。有什么想法来解决这个问题吗? - SkyWalker
使用android:configChanges="orientation",这将不会重新创建您的活动。 - Anand Tiwari
显示剩余3条评论

4

覆盖 Activity.onBackPressed() 方法,然后通过 Intent 将应用程序发送到主屏幕。

从 SDK 中获取:

具有以下类别的 Intent 将允许您返回主屏幕。

ACTION_MAIN 与 CATEGORY_HOME 类别 -- 启动主屏幕。


我在主页活动中重写了onBackPressed。但是,我应该在函数内编写什么代码来关闭应用程序呢? - SkyWalker
你不需要杀死你的应用程序,ActivityManager会为你完成这个任务,只需发送一个返回主页的Intent即可。 - JoxTraex
我的应用程序第一次会要求输入用户名和密码,之后直接打开主页。但是,当我按下返回按钮时,它会回到登录界面。因此,在主页的返回按钮上,我想关闭应用程序(而不是强制终止应用程序)。 - SkyWalker
我在清单文件的<intent-filter>标签中写了action.MAIN和category.HOME,但没有任何效果。 - SkyWalker
1
你做错了,这与你的清单文件毫无关系。我说过要创建具有这些特征的Intent。好好学习文档... - JoxTraex
抱歉,我是Android的新手。感谢您的帮助。 我在onBackPressed()中编写了ACTION_MAIN和CATEGORY_HOME,并且已经起作用了。 但是,下一次我打开应用程序时,它会从主屏幕开始。 - SkyWalker

1

您可以覆盖返回按钮的按键事件,并在按下时关闭应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接