从广播接收器恢复活动

时间:2013-02-18 06:11:22

标签: android android-activity broadcastreceiver

我正在尝试从广播接收器的onReceive()方法中恢复活动,如下所示:

Intent i = new Intent(context, TimerSet.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

但是重新创建活动(TimerSet.class)而不是恢复活动。我发现这个问题的唯一推荐解决方案是使用FLAG_ACTIVITY_REORDER_TO_FRONT,但我已经在使用它了。

另外,使用Intent.FLAG_ACTIVITY_NEW_TASK不适合我的用例,但是当我不提供时会出现以下异常:

android:util.AndroidRuntimeException: Calling startActivity() from outside of an 
Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you 
want?

2 个答案:

答案 0 :(得分:4)

我不确定这是不是你的问题,但我有一个情况,我得到了一个通知,我想在没有启动新实例的情况下启动我的应用程序(如果它已经运行) 我终于发现这些都有效。如果活动已经运行,FLAG_ACTIVITY_NEW_TASK将不会启动新的瞬间。但是,它会将其添加到现有堆栈中。因此,我们可以执行FLAG_ACTIVITY_CLEAR_TOP,因此返回会将用户带到主屏幕,而不是之前的状态。

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

答案 1 :(得分:1)

删除FLAG_ACTIVITY_NEW_TASK标志。 还添加此标志 - > FLAG_ACTIVITY_CLEAR_TOP。如果已经存在,这将阻止创建新活动。