Android:如何从BroadcastReceiver恢复应用程序/活动?

Android:如何从BroadcastReceiver恢复应用程序/活动?,android,android-activity,android-intent,broadcastreceiver,Android,Android Activity,Android Intent,Broadcastreceiver,如果我的程序如下: 启动活动A->活动B 按“主页”按钮 再次单击应用程序 结果:“活动B”显示(它将恢复) 启动活动A->活动B 按“后退”按钮 再次单击应用程序 结果:显示“活动A”(它将重新启动) 我想在广播接收器上做完全相同的事情 启动活动A->活动B 按“主页”按钮 BroadcastReceiver接收到广播并希望“恢复”应用程序 我的预期结果:显示“活动B” 我想在广播接收器上做完全相同的事情 启动活动A->活动B 按“后退”按钮 BroadcastReceiver接收到广播并希望

如果我的程序如下:

  • 启动活动A->活动B
  • 按“主页”按钮
  • 再次单击应用程序
  • 结果:“活动B”显示(它将恢复)

  • 启动活动A->活动B
  • 按“后退”按钮
  • 再次单击应用程序
  • 结果:显示“活动A”(它将重新启动)

    我想在广播接收器上做完全相同的事情

  • 启动活动A->活动B
  • 按“主页”按钮
  • BroadcastReceiver接收到广播并希望“恢复”应用程序
  • 我的预期结果:显示“活动B”

    我想在广播接收器上做完全相同的事情

  • 启动活动A->活动B
  • 按“后退”按钮
  • 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 i = getPackageManager().getLaunchIntentForPackage("com.your.package.name");
    i.setFlags(0);
    i.setPackage(null);
    startActivity(i);
    
    看看这个

    将标志设置为您的目的
    intent。将活动标记为\u重新排序为\u FRONT

    意图。将活动标记为新任务
    如下

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

    您的意思是,在使用新任务标志启动活动A后,活动A没有显示?无论如何,您可以尝试使用
    singleTask
    flag\u activity\u new\u task
    来实现它。否,如果按下“主页”按钮,我希望“活动B”显示。我尝试了singleTask并标记了“活动”\u NEW\u任务,但当按下“主页”按钮时,它不会恢复到活动B。声明您的活动B启动模式为
    single TASK
    ,除了将
    ActivityA.class
    更改为
    ActivityB.class
    之外,还可以从上面的代码开始,我很高兴知道您解决了问题。接受您自己的回答android源文件ActivityStack.java中的此注释解释了为什么://在本例中,我们启动任务的根活动//但目的不同。我们//应该在顶部启动一个新实例。谢谢您的回答!我找了一整天@@我不知道为什么使用Intent.FLAG\u ACTIVITY\u NEW\u任务的解决方案不起作用。这是在官方文件中指定的!想解释一下你的答案为什么有效吗?