【问题标题】:Started activity from home key screen从主键屏幕开始活动
【发布时间】:2011-02-24 08:21:33
【问题描述】:

我有一个启动活动的后台服务,

Intent i = new Intent(this, MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

销毁此Activity并通过“长按home键菜单”重新启动后,此Activity再次启动。但我想开始主要活动。我怎么会意识到这一点?

【问题讨论】:

  • 你找到什么好的解决办法了吗?

标签: android android-activity android-service android-homebutton


【解决方案1】:

你能详细解释一下吗?如果我了解您的问题,请尝试设置 FLAG_ACTIVITY_NO_HISTORY。

另外一种手动解决方案是检查 MyActivity 中意图的 FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY,如果您看到此标志设置,则启动到主要活动。下面的代码应该做到这一点:

if ((getIntent().getFlags() & FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) > 0) {
   activity.startActivity(new Intent(context , MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));    
}

【讨论】:

  • 我从服务启动活动以显示通知(我不能使用内置通知)。如果用户再次启动应用程序,他不应该看到通知活动。他应该看到主要活动。如果从应用程序菜单重新启动应用程序,或者如果按下后退按钮没有终止主要活动,则它工作正常。如果应用程序从“长按主键菜单”(有更好的名称吗?)重新启动,并且主要活动之前通过按下后退按钮被杀死,则通知活动再次启动。 noHistory 不起作用:-(。谢谢!
  • 我现在明白了。可能有更好的解决方案,但请参阅我的编辑以获取解决方案。
  • 它似乎有效,但我认为这不是最好的方法 ;-) 。很高兴看到更好的解决方案。但感谢您提供此解决方法!
【解决方案2】:

问题就像您从服务启动活动-->通知来了-->用户再次启动应用程序-->没有通知-->主要活动出现在前台 现在,如果应用程序是从“长按主键菜单”启动的,则主活动正在启动并显示通知。

所以一个明确的解决方案是将主要活动设为“从最近排除 = true”和“无历史记录 = true;”用户将无法在“长按主键菜单”中看到您的活动

【讨论】:

  • 这是一种解决方法。但将其纳入历史并开始正确的活动会更好。谢谢!
  • 这是 AndroidManifest 提供的参数,我们使用它来使应用程序以我们的方式工作,这是正确的:)
  • 当然,但对用户来说不是很舒服;-)。但是感谢您向我展示了这个可能的解决方案!
  • 使用首选项来决定在您的活动启动时需要启动哪个活动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多