首页 > 解决方案 > 如何从带有 FLAG_ACTIVITY_SINGLE_TOP 的通知导航到活动

问题描述

所以我有这个前台服务通知,当用户点击我想导航到我的一项活动时。好的,似乎您只需要向通知生成器提供一个 PendingIntent 。

好的,这似乎工作正常......除了我不想在用户多次点击时向活动堆栈添加更多相同的条目。

使用 Intent.FLAG_ACTIVITY_SINGLE_TOP...OK,所以现在我有这样的东西:

    Intent intent = new Intent(context, MyAwesomeActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    Notification notification = new NotificationCompat.Builder(context, NotificationChannel.DEFAULT_CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_info)
            .setContentTitle("Title")
            .setContentText("Some nice text here.")
            .setContentIntent(PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT))
            .build();

看起来不错……除了它不起作用。重复点击只是将新条目添加到堆栈中,然后按后退按钮多次显示相同的活动。不太好。

如何使其正常工作?

标签: androidandroid-activitynotifications

解决方案


看来我的 rtfm 还不够。

我在官方 Android 文档页面上找到了一个可行的解决方案: https ://developer.android.com/training/notify-user/navigation

有效的修订版:

    Intent intent = new Intent(context, MyAwesomeActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addNextIntentWithParentStack(intent);

    Notification notification = new NotificationCompat.Builder(context, NotificationChannel.DEFAULT_CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_info)
            .setContentTitle("Title")
            .setContentText("Some nice text here.")
            .setContentIntent(stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT))
            .build();

推荐阅读