#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) и более поздние версии накладывают ограничения на то, когда приложения могут запускать действия, когда приложение работает в фоновом режиме. Эти ограничения помогают свести к минимуму прерывания для пользователя и позволяют пользователю лучше контролировать то, что отображается на их экране.
Для целей запуска действий приложение, выполняющее службу переднего плана, по-прежнему считается «в фоновом режиме»
Альтернативы отображения активности
Приложения, работающие в фоновом режиме, должны отображать уведомления, зависящие от времени, для предоставления срочной информации пользователю вместо непосредственного запуска действия.
Исключения из ограничений: есть некоторые исключения, в которых приложение может отображать активность напрямую, некоторые из них:
- Приложение имеет видимое окно, например, действие на переднем плане.
- Приложение имеет активность в заднем стеке задачи переднего плана.
- Приложение имеет активность в заднем стеке существующей задачи на экране «Последние».
Для получения более подробных статей прочтите это