【问题标题】:Open new Android activity in background在后台打开新的 Android 活动
【发布时间】:2015-03-26 11:33:23
【问题描述】:

总结
当应用程序在后台时,我可以从后台服务启动一个新 Activity, 不将应用程序置于前台吗?

背景
假设我正在为 Android 开发 MyApp。此应用处理非常敏感信息,因此我们需要在用户一段时间不活动时锁定该应用。

MyApp 有一个服务,MyService。与应用程序的不同用户交互会重置 MyService 中的非活动计时器。当不活动计时器到期时,服务会启动一个新活动 LockActivity,它充当 MyApp 的屏幕锁定。用户必须重新验证自己才能通过 LockActivity 并继续使用应用程序。

这一切都有效,但有一个问题:当 LockActivity 启动时,它会将应用程序置于最前面。由于用户可能正在做其他事情(浏览 Facebook 或其他),她会很生气,这是正确的。

我用于从后台启动活动的代码是:

Activity topActivity = magicallyFindMyTopActivity(); // This part is not important; it works though
Intent intent = new Intent(this, LockActivity.class);
topActivity.startActivity(intent);

你知道有什么方法可以避免这种情况吗?

【问题讨论】:

  • 让您的onResume() 方法检查计时器服务并打开LockActivity。不要使用服务启动活动。
  • 我认为系统警报对话框可以帮助您。 [1]:stackoverflow.com/questions/4481226/…
  • 我没明白你的意思。您是说当 LockActivity 启动并且应用程序处于最前面时。这不是你想要的?
  • @Dithanial 是的,这实际上可以正常工作。从来没想过。
  • @traninho:不,我希望应用程序在后台锁定。当用户返回应用程序时,它现在已正确锁定。

标签: android android-activity android-service


【解决方案1】:

Activity 几乎每次都会出现在用户面前,因此用户可以与之交互。

我认为最适合您尝试归档的内容是使用 OnResume 事件并检查表明应用程序是否安全的字段。

类似这样的:

onResume(..){
  if(isSecured){
     _secureMyApp();
  }    
}

看看这个:

【讨论】:

  • 这行得通。进行了一些重构,但代码总体上更简洁。并且实际工作,所以这是一个加号!
  • @MW。很高兴它帮助了你:)!
【解决方案2】:

每隔一段时间检查后台服务中的安全性,现在有一个标志

boolean secure = true;

当时间到期时更新标志secure = false;

在您的主要活动中,每次检查标志是否为假,要求用户进行身份验证。 (不要创建任何新活动)

【讨论】:

    【解决方案3】:

    不要在不活动计时器到期时盲目启动锁定活动,只需设置一些变量,当您的应用恢复或启动时检查变量状态并首先显示锁定屏幕。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多