Открыть активность из уведомления переднего плана, когда данные Firebase изменились

Я чувствую, что делаю что-то глупое здесь. Я настроил службу, которая прослушивает изменения в коллекции в моей базе данных firebase, и когда произошли изменения, приложение должно открываться, за исключением того, что действие не открывается. И сообщение журнала, и всплывающее уведомление появляются, когда данные изменяются в коллекции, но действие не открывается. Код из onStartCommand приведен ниже.

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    String input = intent.getStringExtra("inputExtra");
    context = getApplicationContext();
    Intent notificationIntent = new Intent(context, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Example Service")
            .setContentText(input)
            .setSmallIcon(R.drawable.ic_launcher_foreground)
            .setContentIntent(pendingIntent)
            .build();
    startForeground(1, notification);


    reference.addSnapshotListener(new EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
            for (DocumentChange documentChange : value.getDocumentChanges()) {
                if (documentChange.getType() == DocumentChange.Type.MODIFIED) {
                    Log.d(TAG, "onComplete: reference modified");
                    Toast.makeText(context, "message received", Toast.LENGTH_SHORT).show();
                    Intent intent1 = new Intent(context, Open.class);
                    intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(intent1);

                }
            }
        }
    });

    return START_STICKY;
}

Любая помощь будет принята с благодарностью.

Потому что не разрешено «автоматически» запускать действие из службы. В качестве альтернативы вы можете отобразить уведомление, которое должно запускать желаемое действие, когда пользователь явно нажимает на него.

Rahul Shukla 10.12.2020 15:06
0
1
127
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Android 10 (уровень API 29) и более поздние версии накладывают ограничения на то, когда приложения могут запускать действия, когда приложение работает в фоновом режиме. Эти ограничения помогают свести к минимуму прерывания для пользователя и предоставить пользователю больший контроль над тем, что отображается на его экране.

В целях запуска действий приложение, в котором запущена служба переднего плана, по-прежнему считается «в фоновом режиме».

Альтернативы показу активности

Приложения, работающие в фоновом режиме, должны отображать срочные уведомления, чтобы предоставить пользователю срочную информацию, а не запускать действие напрямую.

Исключения из ограничений: Есть некоторые исключения, в которых приложение может отображать активность напрямую, вот некоторые из них:

  • Приложение имеет видимое окно, например, действие на переднем плане.
  • Приложение имеет действие в заднем стеке задачи переднего плана.
  • Приложение имеет активность в бэкстеке существующей задачи на Недавний экран.

Более подробные статьи читайте это

Другие вопросы по теме