#android #service #android-service #android-8.0-oreo #foreground-service
#Android #Обслуживание #android-сервис #android-8.0-oreo #передний план-сервис
Вопрос:
В настоящее время я изучаю, как создать службу чата с плавающим пузырьком на переднем плане.
Однако я заметил, что все библиотеки, которые я пытался использовать, не работают с API-28.
Я полагаю, это связано с новыми ограничениями, упомянутыми здесь, в документах Android.
По сути, в нем говорится, что если я вызываю службу, которая показывает вещи на переднем плане:
я должен вызвать startForegroundService()
вместо startService()
.
Кроме того, в нем говорится, что:
«После того, как система создала сервис, у приложения есть пять секунд, чтобы вызвать startForeground()
метод сервиса, чтобы показать уведомление о новой службе, видимое пользователем».
Я полагаю, что, возможно, именно по этой причине я не могу заставить работать эти библиотеки chathead на переднем плане.
Может ли кто-нибудь привести пример того, как я должен это реализовать?
Пожалуйста, и спасибо вам!
Ответ №1:
@Override
public void onCreate() {
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Android O requires a Notification Channel.
if (Build.VERSION.SDK_INT >= 26) {
CharSequence name = getString(R.string.app_name);
// Create the channel for the notification
@SuppressLint("WrongConstant")
NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name, NotificationManager.IMPORTANCE_LOW);
// Set the Notification Channel for the Notification Manager.
if (notificationManager != null) {
notificationManager.createNotificationChannel(mChannel);
}
startForegroundService(new Intent(ForegroundService.this, ForegroundService.class));
//We only need to call this for SDK 26 , since startForeground always has to be called after startForegroundService.
startForeground(NOTIFICATION_ID, getNotification());
}
else {
startService(new Intent(ForegroundService.this, ForegroundService.class));
}
Кроме того, этот проект является хорошей основой для начала реализации ForegroundService:
https://github.com/googlesamples/android-play-location/tree/master/LocationUpdatesForegroundService
Комментарии:
1. Итак, вы хотите сказать, что для API-26 мне также нужно создать канал уведомлений, если я запускаю службу переднего плана — это правильно? Опять же, я пытаюсь выяснить, как создать «плавающий пузырь / представление в чате на переднем плане», аналогичный тому, как Facebook Messenger делает это. Нужен ли для этого канал Notificationn?
2. Да, вам нужен канал уведомлений для отображения уведомления в API 26 . А для службы переднего плана требуется уведомление в API 26 .
3. Не могли бы вы, возможно, дать мне краткое изложение шагов того, как я теперь буду создавать плавающий чат на переднем плане, начиная с API-26 и выше? Опять же, ни одна из библиотек или примеров больше не работает, поэтому мне просто нужно знать, как их настроить или что я должен добавить.. Я был бы чрезвычайно благодарен.
4. Я никогда раньше не делал ничего подобного. Но ссылка на githbub, которую я опубликовал, предоставит вам часть ForegroundService.
5. Да, я взглянул на ссылку, которую вы опубликовали, но она кажется довольно ориентированной на получение местоположения — и хотя в ней реализован сервис переднего плана, я думаю, что в конечном итоге это будет немного отличаться от того, что мне нужно сделать.. Я все еще немного новичок в некоторых вещах, так что чем меньше путаницы, тем лучше, вы понимаете, что я имею в виду, лол.. Мне не нужно, чтобы меня держали за руку, но в то же время мне иногда бывает трудно отличить, что нужно, а что НЕТ, из примера, основанного на том, что я на самом деле пытаюсь сделать. Я начинаю терять надежду на достижение этого :/