除非该活动的实例已在运行,否则请勿打开具有待定意图的活动

时间:2018-08-16 19:06:04

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

因此,我正在构建一个应用程序,用户在其中进行应用程序活动非常重要(必须遵循一定的路径)。我还使用通知来通知用户它们在流程中的位置,并在通知上具有待定的意图,因此单击通知可打开正确的活动。

我的问题是,如果:

活动A运行,用户收到活动A奔跑的通知

活动A完成(已销毁),活动B开始,用户收到活动B开始的通知

用户进入系统托盘并单击活动A的通知,将其打开(他们不应该这样做,因为它完全破坏了我的应用程序流程)

防止这种情况的最佳方法是仅在活动A的实例已在运行的情况下打开它。但是我不知道该怎么做。

编辑:通知代码:

 NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    String NOTIFICATION_CHANNEL_ID = "my_channel_id_01";

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "My Notifications", NotificationManager.IMPORTANCE_MAX);

        // Configure the notification channel.
        notificationChannel.setDescription("Channel description");
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000});
        notificationChannel.enableVibration(true);
        notificationManager.createNotificationChannel(notificationChannel);
    }

    Intent notificationIntent = new Intent(getApplicationContext(), MapsActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    PendingIntent intent = PendingIntent.getActivity(getApplicationContext(), 0,
            notificationIntent, 0);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);

    notificationBuilder.setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.drawable.ic_error_black_24dp)
            .setTicker(title)
            .setPriority(Notification.PRIORITY_MAX)
            .setContentTitle(title)
            .setContentText(content)
            .setContentInfo("Info")
            .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
            .setContentIntent(intent)
            .setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });

    notificationManager.notify(/*notification id*/1, notificationBuilder.build());

0 个答案:

没有答案