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

#android #firebase #google-cloud-firestore

# #Android #firebase #google-облако-firestore

Вопрос:

Я чувствую, что делаю здесь что-то глупое. Я настроил службу, которая прослушивает изменения в коллекции в моей базе данных 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;
}
 

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

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

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

Ответ №1:

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

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

Альтернативы отображения активности

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

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

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

Для получения более подробных статей прочтите это