Здравствуйте друзья,
Это ссылка на первую часть примеров сервисов: https://medium.com/@alokomkar.gudikote/android-basics-service-examples-a1f584ce7e50
В этом блоге мы продолжим с того места, на котором остановились в предыдущей части.
Чтобы заставить наше приложение запускать службу, даже когда пользователь убивает приложение, нам нужно сообщить пользователю, что есть служба, которая работает в фоновом режиме, с помощью уведомления.
Для этого мы будем использовать службу переднего плана с уведомлением в строке состояния нашего телефона.
- Примеры приложений, которые будут использовать службы переднего плана, включают следующее:
Приложение для музыкального проигрывателя, которое воспроизводит музыку в службе переднего плана. В уведомлении может отображаться текущая воспроизводимая песня.
приложение для фитнеса, которое записывает пробежку пользователя в службе переднего плана после получения разрешения от пользователя. В уведомлении может отображаться расстояние, пройденное пользователем во время текущего занятия фитнесом.
Ограничения Android 13:
Начиная с Android 13 (уровень API 33), пользователи могут по умолчанию отклонять уведомление, связанное со службой переднего плана.
В предыдущих версиях Android уведомление нельзя было закрыть, если служба переднего плана не была остановлена или удалена с переднего плана.
Если вы хотите, чтобы уведомление нельзя было закрыть пользователем, передайте
true
в методsetOngoing()
при создании уведомления с помощьюNotification.Builder
.
Уведомление отображается пользователю немедленно, если запущенная служба переднего плана имеет одну из характеристик:
- Служба связана с уведомлением, которое включает в себя кнопки действий.
- Сервис имеет
foregroundServiceType
изmediaPlayback
,mediaProjection
илиphoneCall
- Служба предоставляет вариант использования, связанный с телефонными звонками, навигацией или воспроизведением мультимедиа, как определено в атрибуте категории уведомления.
- Служба отказалась от изменения поведения, передав
FOREGROUND_SERVICE_IMMEDIATE
вsetForegroundServiceBehavior()
при настройке уведомления.
Примечание. В Android 13 (уровень API 33) или выше, если пользователь отклоняет разрешение на уведомление, он по-прежнему видит уведомления, относящиеся к службам переднего плана, в Диспетчере задач служб переднего плана (FGS), но не видит их в ящик уведомлений.
Мы начнем с изменения fragment_home.xml следующим образом:
Мы создадим новый Service с именем AudioForegroundLoopService :
Мы также создадим новую запись в нашем файле android_manifest.xml.
<service android:name="com.alokomkar.service.AudioForegroundLoopService"/>
- Приложения, предназначенные для Android 9 (уровень API 28) или выше и использующие службы переднего плана, должны запрашивать разрешение
FOREGROUND_SERVICE
, как показано в следующем фрагменте кода. Это обычное разрешение, поэтому система автоматически предоставляет его запрашивающему приложению.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <application ...> ... </application> </manifest>
Примечание. Если приложение, нацеленное на уровень API 28 или выше, пытается создать службу переднего плана без запроса разрешения
FOREGROUND_SERVICE
, система выдает ошибкуSecurityException
.
Вот наш обновленный HomeFragment:
Чтобы помочь нам отображать уведомления, связанные со службой переднего плана, мы создали следующий помощник вместе с классом перечисления ServiceAction:
После успешного завершения мы увидим уведомление для службы всякий раз, когда приложение находится в фоновом режиме.
Примечание. Теперь звук продолжает воспроизводиться, даже если пользователь закрыл приложение в фоновом режиме.
В следующем блоге мы рассмотрим привязку службы к компоненту приложения, таким образом, получив тип взаимодействия клиент-сервер.
Это все люди.