我正在显示一个意图如下的通知:
Intent intentOpen = new Intent(this, MainActivity.class);
intentOpen.setAction("ACTION_SHOW_BACKUP_FRAGMENT");
intentOpen.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntentOpen = PendingIntent.getActivity(this, 0, intentOpen, PendingIntent.FLAG_UPDATE_CURRENT);
notificationBuilder.setContentIntent(pendingIntentOpen);
正如您所看到的,该操作设置为"ACTION_SHOW_BACKUP_FRAGMENT"
,因此当用户点击通知时,我的 singleTop MainActivity可以在onResume()
中执行操作方法getIntent().getAction()
。
为了实现这一点,我必须像这样实施onNewIntent()
:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
到目前为止,非常好,收到了操作,我可以显示备份视图。但是,如果我按下主页按钮,以便应用程序转到后台,然后通过最近的应用程序菜单再次输入,则会再次调用onResume()
方法,但"ACTION_SHOW_BACKUP_FRAGMENT"
操作仍然是那里! 所以我无法区分用户是否真的点击了通知,或者只是恢复了应用。
我尝试使用Intent和PendingIntent标志组合的日志解决问题,但没有任何效果。我在setIntent(new Intent());
中使用操作后尝试调用onResume()
,但下次恢复应用时,onNewIntent()
仍然会获得"ACTION_SHOW_BACKUP_FRAGMENT"
操作。
我该如何解决这个问题?
答案 0 :(得分:3)
最后,我找到了Intent和PendingIntent的正确组合标志:
// Create pending intent to open the backup fragment
intentOpen.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntentOpen = PendingIntent.getActivity(this, 0, intentOpen, PendingIntent.FLAG_CANCEL_CURRENT);
这仍有效,但我仍然<{1}}使用onResume()
消费意图