Обработка нажатия на оповещение

101
30 октября 2021, 23:50

Нужно чтобы при нажатии на оповещение с определенным текстом открывалась определенная вкладка viewPager, но как это реализовать?

private void showNotification(String title, String body) {
        int a = new Random().nextInt();
        array.add(a);
        resultIntent = new Intent(this, MyFragment.class);
        int b = Integer.parseInt(page.replaceAll("[\\D]", ""));
        resultPendingIntent = PendingIntent.getActivity(this, 1, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle(title)
                        .setContentText(body)
                        .setContentIntent(resultPendingIntent);
        notification = builder.build();
        notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(a, notification);
        list.add(b+":"+a);
        System.out.println("Notification "+list);

    }
Answer 1

Нужно добавить action:

private void showNotification(String title, String body) { int a = new Random().nextInt();

    array.add(a);
    resultIntent = new Intent(this, MyFragment.class);
    int b = Integer.parseInt(page.replaceAll("[\\D]", ""));
    resultPendingIntent = PendingIntent.getActivity(this, 1, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle(title)
                    .setContentText(body)
                    .setContentIntent(resultPendingIntent);
    builder.addAction(
        R.drawable.ic_icon,
        "open",
        PendingIntent.getActivity(
            context, 
            requestCode,
            Intent(this, YourActivity.class).putExtra(YourEnum.PAGE_STRING.getName(), yourPage), 
            PendingIntent.FLAG_UPDATE_CURRENT
        )
    )
    notification = builder.build();
    notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(a, notification);
    list.add(b+":"+a);
    System.out.println("Notification "+list);
}

Идея следующего характера, вы в нотификашку добавляете PendingIntent, в него добавляете интент с вашей активностью и добавляете ту страницу, которую необходимо открыть, а в активности ловите данный интент, и открываете нужную страницу. Создаёте слушателя и через него устанавливаете нужную страницу. Внимание, там есть три разных слушателя, зависит от версии ViewPager:

val listener = object : ViewPager.OnPageChangeListener {
   override fun onPageScrollStateChanged(state: Int) {
        }
        override fun onPageScrolled(
            position: Int,
            positionOffset: Float,
            positionOffsetPixels: Int
        ) {
        }
        override fun onPageSelected(position: Int) {
            )
        }
    }
}
onCreate {
  val page = intent.getStringExtra(YourEnum.PAGE_STRING.getName())
  viewPager.setOnPageChangeListener(viewPagerListener)
//после настройки и установки адаптера (тоесть добавления данных в адаптер) и вызова adapter.notifyDataSetChanged(), если после изменения адаптера не вызовете и будете устанавливать страницу, получите креш
  listener.onPageSelected(page) //учитывайте что страницы идут с нуля, если выше не учтено, используйте page-1. Установку страницы я например делаю в коллбеке, который добавляет данные в адаптер
}

P.S. Ссори, давно не делал на джаве, потому Котлин. Тут ничего нет страшного, разберётесь

Answer 2

Это не совсем то, что Вам надо, но все же, оставлю, вдруг надо будет потом. При нажатии на оповещение открывается приложение, а точнее MainActivity. Можно вписать этот код в начальный класс

                if (intent.extras != null) {
                for (id in intent.extras!!.keySet()) {
                    val id_value = intent.extras!!.get(id)
                    if (id.equals("id")) {
                        val intent = Intent(applicationContext, CurrentNews::class.java)
                        intent.putExtra("id", id_value.toString())
                        startActivity(intent)
                    }
                }
            }

Вы отправляете оповещение с текстом news и id конкретной новости, к примеру. При нажатии по оповещению открывается приложение. Получаем news + id и открываем конкретную активити. Можно создать новую активити (такую же, как фрагмент, который Вам нужен), и при запуске заполнить его данными. Или же вставить в него фрагмент, который во ViewPager.

READ ALSO
Чтения файла построчно

Чтения файла построчно

Написал в пятницу работало сегодня не работает что я не так делаю ?

76
Как заполнить пустое поле CSS [закрыт]

Как заполнить пустое поле CSS [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

94
Есть ли команда для создания проекта с webpack?

Есть ли команда для создания проекта с webpack?

Вопрос в заголовкеПоясню, что я имею в виду

246
Как получить 2 гет параметра?

Как получить 2 гет параметра?

Есть 2 формы1 - поиск, 2 фильтрация

193