Нажатие на уведомление, полученное, когда приложение находится на переднем плане, ничего не делает

#android #ionic-framework

Вопрос:

Я надеюсь, что эксперты по Android знают, как мне помочь. Я работаю с Push-уведомлениями (я отправляю их почтальону с помощью сервиса FCM), дело в том, что, пока приложение находится в фоновом режиме, все работает отлично(я имею в виду, что они отображаются правильно и перенаправляются на нужные мне страницы), однако, когда приложение находится на переднем плане, они выглядят превосходно, но когда вы прикасаетесь к ним, они абсолютно ничего не делают. Я очень новичок в Android studio, так как это рабочий проект, и я учусь по ходу дела, любая помощь или объяснение очень ценятся. Я покажу вам немного моего кода ниже.

Это отлично работает, когда приложение находится в фоновом режиме

Это показывает мне уведомление, когда приложение находится на переднем плане, но оно ничего не делает, когда я нажимаю

ИЗМЕНИТЬ: ФАКТИЧЕСКИЙ КОД

     @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        Log.d("msg", "onMessageReceived: "   remoteMessage.getData().get("message"));
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        String channelId = "Default";
        NotificationCompat.Builder builder = new  NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(remoteMessage.getNotification().getTitle())
                .setContentText(remoteMessage.getNotification().getBody()).setAutoCancel(true).setContentIntent(pendingIntent);;
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(channelId, "Default channel", NotificationManager.IMPORTANCE_DEFAULT);
            manager.createNotificationChannel(channel);
        }
        manager.notify(23, builder.build());
    }
}
 

Однако я думаю, что часть проблемы связана с тем фактом, что этот блок кода никогда не выполняется, но странно то, что выполняется прослушиватель pushNotificationActionPerformed

НЕ РАБОТАЙ:

 PushNotifications.addListener(
      'pushNotificationReceived',
      (notification: PushNotificationSchema) => {
        alert('Llegó una notificación!!!');
        if (notification amp;amp; Capacitor.getPlatform() === 'android') {
          this.createLocalNotification(notification);
        }
      }
    );
 

работа:

  PushNotifications.addListener(
      'pushNotificationActionPerformed',
      (notification: ActionPerformed) => {
        alert('Llegó una notificación!!!');
        const data = notification.notification.data;
        if (data.ticket) {
          const ticketParsed = JSON.parse(data.ticket);
          this.store.dispatch(new StoreSelectedTicket(ticketParsed));
          this.router.navigate(['/support/ticket-status']);
        }
        if (data.statement) {
          const parsedStatement = JSON.parse(data.statement);
          this.downloadStatements(parsedStatement.link);
        }
        if (data.deposit) {
          const parsedDeposit = JSON.parse(data.deposit);
          this.store.dispatch(new StoreSelectedDeposit(parsedDeposit));
          this.router.navigate(['/deposits/daily-detail/detail-by-reference-number']);
        }
      }
    );
  }
 

Ответ №1:

Я предполагаю, что следующие причины могут быть следующими:

Во-первых, флаг для намерения, которое передается в ожидающем намерении, должен быть либо Intent.FLAG_ACTIVITY_NEW_TASK или Intent.FLAG_ACTIVITY_CLEAR_TASK

Во-вторых, последний параметр для pendingIntent может быть 0 , если вам не нужно FLAG_ONE_SHOT что-то конкретное.

В-третьих, используйте ненулевое уникальное целое число для manager.notify(non-zero-integer,builder.build)

Вы можете проверить более подробную информацию в официальной документации

Комментарии:

1. Спасибо за ответ!! Ваш ответ очень близок к решению моей проблемы. Теперь, когда я нажимаю на уведомление, приложение перезапускается, это не то поведение, которое я ищу, но, по крайней мере, теперь оно что-то делает! Я не знаю, что еще это может быть

2. @MartinRios Не могли бы вы добавить, как выглядит ваш новый код?

3. Конечно! теперь отредактируйте сообщение

4. @MartinRios Я думаю, что вам не нужно использовать оба флага для намерения, достаточно только одного флага. Или Intent.FLAG_ACTIVITY_NEW_TASK или Intent.FLAG_ACTIVITY_CLEAR_TASK . Я не являюсь разработчиком ionic, поэтому не могу сказать об ионном коде.

5. Большое спасибо за вашу помощь c: