Здравствуйте друзья,

Это ссылка на первую часть примеров сервисов: https://medium.com/@alokomkar.gudikote/android-basics-service-examples-a1f584ce7e50

В этом блоге мы продолжим с того места, на котором остановились в предыдущей части.

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

Для этого мы будем использовать службу переднего плана с уведомлением в строке состояния нашего телефона.

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

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

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

Ограничения Android 13:

Начиная с Android 13 (уровень API 33), пользователи могут по умолчанию отклонять уведомление, связанное со службой переднего плана.

В предыдущих версиях Android уведомление нельзя было закрыть, если служба переднего плана не была остановлена ​​или удалена с переднего плана.

Если вы хотите, чтобы уведомление нельзя было закрыть пользователем, передайте true в метод setOngoing() при создании уведомления с помощью Notification.Builder.

Уведомление отображается пользователю немедленно, если запущенная служба переднего плана имеет одну из характеристик:

  1. Служба связана с уведомлением, которое включает в себя кнопки действий.
  2. Сервис имеет foregroundServiceType из mediaPlayback, mediaProjection или phoneCall
  3. Служба предоставляет вариант использования, связанный с телефонными звонками, навигацией или воспроизведением мультимедиа, как определено в атрибуте категории уведомления.
  4. Служба отказалась от изменения поведения, передав 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:

После успешного завершения мы увидим уведомление для службы всякий раз, когда приложение находится в фоновом режиме.

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

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

Это все люди.