无法删除意图附加项!

11

我正在创建一个通知用于通知托盘。我像这样指定了一个点击意图:

Intent intent = new Intent(context, MyActivity.class);
intent.putExtra("foo", true);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.setData(Uri.parse("" + System.currentTimeMillis()));

MyActivity类在存在"foo"参数的情况下可以成功启动。然而,我无法将其后面的额外内容去掉 - 似乎它会一直保留在Intent中:

// MyActivity
public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    // please go away..
    intent.removeExtra("foo");
    getIntent().removeExtra("foo");
}

遍历 Intent 的键时会发现 "foo" 不再存在。但是,如果我将 Activity 放到后台,然后再次将其调回前台,则 "foo" 参数又会出现。

有人知道如何真正消除它吗?我也尝试了调用 setIntent(),但是行为一样。就像启动器一直持有原始 Intent 并不断重复使用它。

谢谢


这是Java和指针的一个愚蠢案例。在复制没有foo的内容后,您可能需要尝试最终确定原始意图。 - hwrdprkns
啊,如何最终确定原始意图呢?我是否应该从onNewIntent()中调用finish(),然后再次启动活动?我想用户不会看到这个偷偷摸摸的跳转,而且我也可以摆脱那个“foo”额外的东西。我认为这可能行得通! - user291701
1个回答

0

这正是Android正在做的事情。在onNewIntent方法中修改意图参数对通知系统存储的意图没有影响。您应该创建一个新的Intent并将其在活动中本地存储,像保存和恢复任何其他数据一样。

编辑:如果您不需要重用意图本身,则将相关数据单独存储可能更有意义。


哦,我不太明白 - 你是指创建一个新的Intent并使用setIntent()调用它吗?(似乎会产生相同的行为)。否则我们就得自己管理这个状态了,我想是这样吧?谢谢。 - user291701
哦,你是想用额外的更改将意图放回通知栏吗?我认为正确的做法是创建一个新的意图和一个新的通知。 - robamaton
7
没错,我想删除那个意图的额外部分,然后下一次用户从启动器启动时,我希望那个额外部分已经被删除了。我尝试创建一个新的通知,并使用setIntent()对其进行调用,但是行为相同 - “foo”键会回来折磨我。 - user291701
4
您能否将多余的部分移除?我无法这样做,最终使用了一个静态布尔标志来指示是否已使用额外的内容并且不应再次使用。对于这个解决方案,我感到非常不满意! - MSquare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接