android - TaskStackBuilder 和后栈的附加功能

标签 android

我正在尝试使用 TaskStackBuilder带有通知以创建返回堆栈以供后退按钮通过。我的应用程序的正常流程:

  1. Activity A 从启动器启动。
  2. 用户从 A 中选择一个项目,该项目启动 B 并附加要加载的内容。
  3. 用户从 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/

相关文章:

android - 在 Android Studio 中预览 View 切换器

Android 在带有圆角和 ImageView 的 GridView 中创建项目

java - 安卓屏幕尺寸支持

java - 应用“按名称排序”时顺序错误

java - 如何通过反射从 declare styleable TypedArray 获取值?

android - 你将如何改进 Dalvik? Android的虚拟机

java - Android、Mapbox、位置、Java

android - GoogleAuthUtil.getToken 安全异常

android - 带有参数化 IN (...) 子句的 Sqlite UPDATE

java - 系统覆盖窗口未按预期工作