将应用程序保持在后台以响应Intent



我的Android应用程序有一个非活动超时。超时时,我会将用户返回到"登录"屏幕,该屏幕(始终)在后堆栈中。我的SignIn类设置了android:launchMode="singleTop",因此总是重用在后台运行的实例。

我在超时时开始这个意图:

Intent inactivityTimeout = new Intent(this, SignIn.class);
inactivityTimeout.putExtra(INTENT_EXTRA_INACTIVITY_TIMEOUT, true);
int flags = inactivityTimeout.getFlags();
flags = flags|FLAG_FROM_BACKGROUND|Intent.FLAG_ACTIVITY_CLEAR_TOP;
inactivityTimeout.setFlags(flags);

当"登录"屏幕启动时,它会检查INTENT_EXTRA_INACTIVITY_TIMEOUT Intent额外项。如果找到,将显示"您已注销"对话框。这一切都正常工作。

现在我来解决这个问题:由于它是基于定时器的,所以无论我的应用程序是在前台还是后台,都可以触发这个Intent。这是我想要的,因为我不希望应用程序因为在后台就无限期地保持登录状态。

但是,当应用程序处于后台并且计时器到期时,此inactivityTimeout Intent将被触发,并且应用程序将带回前台。现在提醒用户他们已经超时并不紧急,所以我希望应用程序保持在后台,以免中断当前操作。

我尝试将FLAG_FROM_BACKGROUND标志添加到Intent中,但应用程序仍然处于前台。我不确定还能尝试什么,也不确定这是否是我应该在意向或接收活动中解决的问题。

有人能在我的意图中(或在回应活动中)提出实现这一点的方法吗。还是我在这里遗漏了一些概念性的东西?谢谢

没有必要因年龄而主动吊销凭据。毕竟,在用户尝试重用这些凭证之前,该过程很可能会终止。

每个活动都需要检查用户是否具有有效凭据。在该检查中,您还可以检查年龄,如果凭据正确但太旧,则只需通过凭据检查即可。并且,在凭据检查失败时,您会显示您的登录活动。

这允许您转储计时器。

您可以有一个全局静态变量来检查应用程序是否在前台:

public static boolean isForeground = false;

在每个活动onPause上,将变量设置为false在每个活动onResume上设置变量true

这样你就可以知道应用程序是否在前台。

达到超时时,如果活动处于前台,则激发意图。如果不是,请将全局静态变量设置为true。该变量将在每个onResume上进行检查,如果为true,它将触发超时意图(这样,当您恢复应用程序时,它将被触发)。

public static boolean hasTimeout = false;

如果您有一个BaseActivity来实现它,并且它被所有其他活动扩展,那么这将更容易。

相关内容

  • 没有找到相关文章

最新更新