我的问题很容易解释:
我通过推送服务创建通知,并通过一些额外内容开始我的活动:
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仍在那里。
知道我做错了吗?
答案 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","");