cpr*_*ack 5 android android-intent android-notifications android-activity 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);
Run Code Online (Sandbox Code Playgroud)
如您所见,该操作设置为"ACTION_SHOW_BACKUP_FRAGMENT"
,以便当用户单击通知时,我的singleTop MainActivity可以使用来获取onResume()
方法中的操作getIntent().getAction()
。
为了使它起作用,我必须onNewIntent()
像这样实现:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切顺利,操作已收到,我可以显示备份视图。但是,如果我按下主页按钮,以便应用程序进入后台,然后通过最近的应用程序菜单再次进入该菜单,该onResume()
方法将再次被调用,但"ACTION_SHOW_BACKUP_FRAGMENT"
操作仍然存在!因此,我无法区分用户是真的单击了通知还是只是恢复应用程序。
我已经尝试使用Intent和PendingIntent标志的组合日志解决问题,但是没有任何效果。setIntent(new Intent());
在使用操作后,我也尝试致电,onResume()
但在下次我恢复该应用程序时onNewIntent()
仍然可以执行"ACTION_SHOW_BACKUP_FRAGMENT"
操作。
我该如何解决这个问题?
最后我找到了 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);
Run Code Online (Sandbox Code Playgroud)
当我仍然使用onResume()
with的意图时,这有效setIntent(null);
归档时间: |
|
查看次数: |
2683 次 |
最近记录: |