因此,我正在构建一个应用程序,用户在其中进行应用程序活动非常重要(必须遵循一定的路径)。我还使用通知来通知用户它们在流程中的位置,并在通知上具有待定的意图,因此单击通知可打开正确的活动。
我的问题是,如果:
活动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());