每次用户返回Android应用程序时都需要登录

每次用户返回Android应用程序时都需要登录,android,security,Android,Security,我正在开发一款处理敏感用户信息的Android应用程序。其中一个要求是,用户需要在离开应用程序并返回时重新登录该应用程序。当用户按下Home按钮,然后重新启动应用程序(AndroidManifest.xml中活动的属性上的clearTaskOnLaunch)时,这很容易解决。然而,当用户长时间按下Home按钮,切换到另一个应用程序,然后返回时,我们需要做同样的事情 我已经研究了所有我能想到的方法,但没有找到一个可行的解决方案。这在安卓系统中可能吗 回答时,请记住这是我无法控制的业务需求。您尝试了

我正在开发一款处理敏感用户信息的Android应用程序。其中一个要求是,用户需要在离开应用程序并返回时重新登录该应用程序。当用户按下Home按钮,然后重新启动应用程序(
AndroidManifest.xml
活动的
属性上的
clearTaskOnLaunch
)时,这很容易解决。然而,当用户长时间按下Home按钮,切换到另一个应用程序,然后返回时,我们需要做同样的事情

我已经研究了所有我能想到的方法,但没有找到一个可行的解决方案。这在安卓系统中可能吗


回答时,请记住这是我无法控制的业务需求。

您尝试了什么?你总是可以用正确的方法清除正在保存的任何会话。

我昨天也遇到了同样的问题。我就是这么做的,效果很好:

  • 将android:launchMode=“singleTask”
  • 添加到
    AndroidManifest.xml
  • 打电话给我的老板说:哎呀,这要花很长时间。。。坚持住
  • 去喝了一整夜啤酒

  • 只是想澄清一下,我的主要活动只有一个按钮,上面写着“登录”并启动登录页面。

    如果我正确理解您希望在每次有人返回应用程序时都需要授权,无论是重新启动还是返回应用程序,那么您可以覆盖活动(或活动)上的onRestart()活动生命周期事件. 因此,在OnRealStutter()中,您可以将用户重定向到登录屏幕(您还可以根据您的需求考虑OnReSuMe())

    本页上的生命周期图表将使这一点更加清楚:

    是否可以让它成为基于时间的东西,而不是严格地离开应用程序返回

    您可以有一个单独的服务来跟踪用户上次访问应用程序的时间

    也就是说,在每次onPause中,活动都会告诉服务某个活动已暂停。服务记录了那次的时间

    在每个onResume中,活动通知服务它希望恢复。如果自上次onPause之后经过了一段时间,则服务指示需要登录

    我认为这将创造一个比他们每次离开应用程序都更好的用户体验。这可能是非常令人沮丧的,花30秒来阅读一条文本,然后必须再次登录


    我想,如果你调整它使超时时间非常短,它的行为与你所要求的非常相似,但可以选择使其不那么严格。

    我认为实现这一点最简单的方法是在你的主要活动中添加一个字段,如
    private boolean isLocked=true

    要在显示另一个应用程序时锁定该应用程序,请在
    onPause()
    方法中设置
    isLocked=true
    。为了确保您的应用程序不会被锁定,当您从自己的活动返回时,请通过
    startActivityForResult()
    启动它们,然后在
    onActivityResult
    中将其解锁


    您现在可以签入
    onResume()
    您的应用是否已锁定,并将用户重定向到您的登录屏幕。

    此方法的挑战在于区分用户何时从同一应用中的另一个活动返回到某个活动,而不是从另一个应用返回到另一个活动。确定,那么,当您在自己的应用程序中启动一个新活动时,您总是传入一个bundle参数来表示用户已登录。如果未提供该参数,则您知道该活动是从应用程序外部启动的(重新启动或重新启动)因此,您需要身份验证。我认为传入bundle参数对我们没有任何好处,因为在保存活动时会保存bundle,而在活动启动时会返回相同的参数。我同意这可能会带来非常令人沮丧的用户体验,但这不是我要做的。如果我能够改变业务的想法,我认为这个想法有一定的潜力,这是不可能的。我们的应用程序有许多用户可以启动的活动,使得堆栈可能有好几层。我想要一个解决方案,将适用于登录后启动的每个活动。拥有一个基类是利用生命周期的自然方式,但是(除非我遗漏了什么),当堆栈中的其他活动停止或暂停时,这难道不会导致用户通过深入应用程序而注销吗?同时添加这两个
    android:launchMode=“singleTask”
    android:clearTaskOnLauch=“true”
    对LoginActivity来说似乎正是我想要的。使用这种特殊的发射模式还有其他副作用吗?没有。。。请看一下文档:顺便说一句,我建议使用这种方法而不是使用lyfecycle方法,因为有时您会看到应用程序被呈现,然后您会看到登录内容。这不太好,至少对于这种应用来说是这样。例如,在我的情况下,我不能让其他人在提示登录前一秒钟查看银行帐户列表。我觉得这应该是解决所有快速修复编码问题的一个答案,您需要休息一天。。。。。。。