即使重新创建活动,也不会清除待处理的意图额外内容

Posted

技术标签:

【中文标题】即使重新创建活动,也不会清除待处理的意图额外内容【英文标题】:Pending intent extras are not cleared even if activity is re created 【发布时间】:2017-03-01 14:03:00 【问题描述】:

我有一个小部件,其中有说话按钮。在小部件上按下说话按钮时,我正在打开 MainActivity,它在清单中声明为单顶。

以下是说话小部件按钮上的代码

Intent speakIntent = new Intent(context, MainActivity.class);
speakIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
speakIntent.putExtra(Constants.IS_LAUNCH_SPEAK, true);
speakIntent.setAction(ACTION_WIDGET_SPEAK_SCREEN);
PendingIntent configSpeakPendingIntent = PendingIntent.getActivity(
            context, Utils.generateRandom(), speakIntent,  PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(
            R.id.btn_speak, configSpeakPendingIntent);

这会打开 google speak 对话框并且工作正常。

但是,如果我按回此对话框并通过在恢复应用程序时再次按回退按钮来最小化应用程序,即使应用程序不是从小部件启动,它也会显示语音对话框

即使活动被破坏,也没有清除意图额外内容我也尝试使用 removeExtra 清除额外内容,但这也不起作用

由于活动在清单中具有单顶启动模式,我检查了 OnNewIntent 是否被调用,但 OnNewIntent 没有被调用 oncreate 在恢复应用程序时被调用

尽管活动被破坏且 removeExtra 不起作用,但从小部件事件调用时,意图附加功能并不清楚

如何解决这个问题。

通过以下通知打开活动时发生同样的事情是代码

Intent intent = new Intent();
intent.putExtra(Constants.SOME_VALUE, value);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, Utils.generateRandom() /* Request code */, intent,
                        PendingIntent.FLAG_UPDATE_CURRENT);

【问题讨论】:

尝试同时使用 PendingIntent.FLAG_ONE_SHOT 和 FLAG_UPDATE_CURRENT 所以 PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT 一次性标志将确保特定的待处理意图仅使用一次 试过了也不行 请看这个类似的问题和我的回答:***.com/a/19820057/769265 【参考方案1】:

输入常量后试试这段代码

callBack.getActivity().clearLaunchIntent();

从您的活动中调用 clearLaunchIntent()

public void clearLaunchIntent()  this.lastLaunchIntent = null; 

希望这会有所帮助

【讨论】:

以上是关于即使重新创建活动,也不会清除待处理的意图额外内容的主要内容,如果未能解决你的问题,请参考以下文章

多个意图打开错误活动的待处理意图

如何正确地将独特的附加内容传递给待处理的意图?

创建 CreateRecurringPaymentsProfile 后,配置文件状态不会在贝宝中从待处理变为活动

如果不使用通知或按钮单击未从某些待处理的意图打开应用程序,是不是可以调用活动?

如何处理通知中的待处理意图

Android - 带有标志的待处理意图