onResume()中的getIntent()总是返回相同的动作,如何使用它?

时间:2014-06-21 15:32:30

标签: android android-intent android-activity android-notifications android-pendingintent

我正在显示一个意图如下的通知:

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"操作。

我该如何解决这个问题?

1 个答案:

答案 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()消费意图