【问题标题】:Android: How to Resume Application/Activity from BroadcastReceiver?Android:如何从 BroadcastReceiver 恢复应用程序/活动?
【发布时间】:2012-03-27 00:58:38
【问题描述】:

如果我的程序如下:

  1. 启动活动 A -> 活动 B
  2. 按“主页”按钮。
  3. 再次点击应用程序。

结果:“活动 B”出现(它恢复)。

  1. 启动活动 A -> 活动 B
  2. 按“返回”按钮。
  3. 再次点击应用程序。

结果:“活动 A”出现(它重新启动)。

我想从 BroadcastReceiver 做同样的事情。

  1. 启动活动 A -> 活动 B
  2. 按“主页”按钮。
  3. BroadcastReceiver 接收到广播并希望“恢复”应用程序。

我的预期结果:“活动 B”出现。

我想从 BroadcastReceiver 做同样的事情。

  1. 启动活动 A -> 活动 B
  2. 按“返回”按钮。
  3. BroadcastReceiver 接收到广播并想要“重新启动”应用程序。

当前结果:“活动 A”出现。

以下代码没有达到我的预期:

public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(context, ActivityA.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    }

我也尝试了“Intent.FLAG_ACTIVITY_LAUNCED_FROM_HISTORY”,但没有成功。

【问题讨论】:

  • 您的意思是,在您使用新任务标志启动活动 A 后,活动 A 没有出现?
  • 无论如何你可以尝试使用singleTaskFLAG_ACTIVITY_NEW_TASK来实现。
  • 不,如果按下“主页”按钮,我希望显示“活动 B”。
  • 我尝试了 singleTask 和 FLAG_ACTIVITY_NEW_TASK 但按下“主页”按钮时它没有恢复到活动 B。
  • 声明你的activity B启动模式是single task,然后用你上面的代码启动它,除了把ActivityA.class改成ActivityB.class

标签: android android-activity android-intent broadcastreceiver


【解决方案1】:

天哪,我成功了!

感谢你们提供的其他答案,但它们不是我想要的。

这样就可以了:

Intent i = getPackageManager().getLaunchIntentForPackage("com.your.package.name");
i.setFlags(0);
i.setPackage(null);
startActivity(i);

【讨论】:

  • 很高兴知道您解决了您的问题。接受你自己的分析器
  • android 源文件 ActivityStack.java 中的这条注释解释了原因: // 在这种情况下,我们正在启动任务的根活动 // // 但目的不同。我们 // 应该在顶部开始一个新实例。
  • 感谢您的回答!我整天都在寻找这个@.@我不知道为什么使用 Intent.FLAG_ACTIVITY_NEW_TASK 的解决方案不起作用。它在官方文档中指定! developer.android.com/reference/android/content/…想解释一下你的答案为什么有效?
【解决方案2】:

看看这个

为您的意图设置标志Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

Intent.FLAG_ACTIVITY_NEW_TASK如下

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT|Intent.FLAG_ACTIVITY_NEW_TASK);

【讨论】:

    猜你喜欢
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多