安卓移除来自getintent的数据

4

我有一个处理深度链接的活动,它是可浏览的活动。

假设用户在另一个应用程序上点击链接,我的可浏览活动处理该意图,并启动应用程序,然后用户通过按返回按钮最小化应用程序。

处理意图数据的类代码。

Uri link = getIntent().getData();

如果用户从正在运行的任务中重新打开应用程序,getIntent()仍然会有数据。

browsable活动的onDestroy方法。

@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
setIntent(null);

}

setIntent(null)没有起作用

我的问题是如何永久性地从意图中删除数据

3个回答

7
我回答有点晚了,但我也遇到了类似的问题并找到了解决方法。您仍然可以在意图中看到数据的原因是您的应用最初是使用包含数据的意图启动的。这个原始意图存储在Android的ActivityManager中,并且不可变(据我所知)。当用户从“最近任务”重新打开应用程序时,Android使用原始意图来重新创建该应用程序。
然而,有一个变通方法。在应用程序的onCreate()方法中,您可以检查Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY是否已设置,这将允许您的应用程序区分它是否正在从“最近任务”中启动,从而可以避免使用包含在意图中的数据。
将以下代码段放入onCreate()方法中,如果应用程序是从“最近任务”中打开的,则会返回 true : (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)!= 0)

你真是救星。在尝试了包括1. setIntent(null) 2. setAction(" ")以及其他所有解决方案之后,这是唯一有效的方法。谢谢! - Shubhral
1
你的回答真是太棒了,值得给你加上 +100000000 的分数!非常感谢! - Mark Kazakov

2

您需要逐个关键字删除数据。我认为您不能用一行代码删除所有数据。

如果您想要删除特定的关键字,则应使用 ==> getIntent().removeExtra("key"); 或者

getIntent().setAction("");

它会删除您的数据。

更多信息请参见 ==> 清除意图


0

为了删除内容,以下代码对我最有效。

//Clear DATA intent
intent.setData(null);
intent.replaceExtras(new Bundle());
intent.setFlags(0);

然后他们可以验证意图不包含数据


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