当我从通知中添加额外的PendinIntent时,RemoveExtras无效

时间:2018-01-05 10:39:04

标签: android android-pendingintent

我的问题很容易解释:

我通过推送服务创建通知,并通过一些额外内容开始我的活动:

notificationIntent = new Intent(getBaseContext(), MainActivity.class);
                notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                        | Intent.FLAG_ACTIVITY_SINGLE_TOP);
notificationIntent.putExtra("typeI",data.get("type"));

Log.e("DEBUG","PUT EXTRA");

PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

因此,当我点击我的通知时,我可以阅读我的活动中的类型:

Log.e("DEBUG", "Extra -> " + getIntent().getStringExtra("typeI"));

这很好。

唯一的烦恼是我退出应用程序后退按钮,Activity被销毁,再次从Launcher启动时,我仍然得到额外的东西!

所以,我只是在阅读之后尝试删除附加内容,以防万一:

Log.e("DEBUG","REMOVE");
getIntent().removeExtra("typeI");
getIntent().putExtra("typeI","");

但这并没有删除附加内容,下次打开应用程序时,Extras仍在那里。

知道我做错了吗?

2 个答案:

答案 0 :(得分:1)

当您删除“extras”时,这只会删除“Intent”的“内存中实例”中的“extras”。原始Intent仍然由Android保留,并在您再次启动应用时重复使用。

这是一个错误或功能,具体取决于您要执行的操作。

我在2013年对一个类似的问题做了相当长的回答。看看我的回答here。您可能想要使用Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

您也不需要使用launchMode="singleInstance"。除非您正在编写HOME屏幕替换,否则不需要此特殊启动模式。

编辑:您在评论中指出这不适合您。我认为问题在于您在Activity中使用了根Notification(具有ACTION = MAIN和CATEGORY = LAUNCHER的根)。试试这个:

对于Notification,请勿使用MainActivity,而是NotificationActivity。在清单中为NotificationActivity定义MainActivity别名,如下所示:

<activity-alias
    android:name=".NotificationActivity"
    android:targetActivity=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme.Launcher">
</activity>

此条目应包含任何<intent-filter>,并且必须在MainActivity的清单条目后显示

答案 1 :(得分:0)

试试这个

getIntent().replaceExtras(new Bundle());
getIntent().setData(null);
after this add you value
getIntent().putExtra("typeI","");