我正在尝试使用 TaskStackBuilder带有通知以创建返回堆栈以供后退按钮通过。我的应用程序的正常流程:
- Activity A 从启动器启动。
- 用户从 A 中选择一个项目,该项目启动 B 并附加要加载的内容。
- 用户从 B 中选择一个项目,这将启动 C 并附加要加载的内容。
有时,在用户未使用我的应用时进行后台更新后,我会生成通知。如果他们单击此通知,它会启动 Activity C,跳过 A 和 B。我正在尝试遵循设计指南并创建一个后退堆栈,因此当他们按下返回时,它将转到 Activity B 而不是主屏幕。我的问题是 Activity B 在其启动 Intent 中需要额外的内容来告诉它从数据库中获取什么。
我当前的 TaskStackBuilder 代码:
TaskStackBuilder sBuilder = TaskStackBuilder.create( this );
sBuilder.addParentStack( ActivityC.class );
sBuilder.addNextIntent( launchIntent );
pIntent = sBuilder.getPendingIntent( 0, PendingIntent.FLAG_ONE_SHOT );
点击通知启动 Activity C 就好了,但是当我按下它时,它会从我的 ContentProvider 中爆发出一个 IllegalArgumentException
,因为 Activity B 不知道要请求什么 ID。有什么办法可以把这个额外的东西放到后面的堆栈中,还是我被卡住了?
最佳答案
这一行:
sBuilder.addParentStack( ActivityC.class );
添加为 ActivityC
声明的所有父级在 AndroidManifest.xml
在 <meta-data>
.不知道是什么,没用过。我怀疑你需要它。
这一行将 Intent 添加到数组中:
sBuilder.addNextIntent(launchIntent);
那么 Intent 数组用于创建PendingIntent,可能是PendingIntent.getActivities ,我找不到实现,然后在某处开始 Context.startActivities .
我认为你只需要创建一组 Intent ,在那里你可以添加额外内容:
Intent activityA = new Intent(context, ActivityA.class);
activityA.putExtra(key, valueA);
Intent activityB = new Intent(context, ActivityB.class);
activityB.putExtra(key, valueB);
Intent activityC = new Intent(context, ActivityC.class);
activityC.putExtra(key, valueC);
并将它们添加到构建器:
sBuilder.addNextIntent(activityA);
sBuilder.addNextIntent(activityB);
sBuilder.addNextIntent(activityC);
pIntent = sBuilder.getPendingIntent( 0, PendingIntent.FLAG_ONE_SHOT );
我没有测试过,这只是我快速研究的结果,如果我错了希望有人纠正我。
关于android - TaskStackBuilder 和后栈的附加功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148701/