
Android 14 a transformé le paysage des services au premier plan, imposant des changements essentiels pour les applications ciblant la version 34 du SDK. Explorons ces modifications et les actions requises pour les développeurs afin de s’aligner.
Date limite cible : À partir du 31 août 2024, les nouvelles versions et mises à jour d’applications doivent cibler la version 34+ du SDK.
Nous examinerons également les exceptions courantes et leurs résolutions, avec en point d’orgue un projet d’exemple illustrant la mise en œuvre correcte des services au premier plan.
Comprendre les services au premier plan
Les services au premier plan sont les moteurs de votre application, effectuant des opérations visibles qui se poursuivent même lorsque l’application est en arrière-plan. Ces services nécessitent l’affichage d’une notification système pour informer les utilisateurs de leur statut actif et de leur utilisation des ressources.
Exemples d’utilisation :
- Un lecteur de musique, comme Spotify, diffusant des morceaux sans interaction avec l’application.
- Un traqueur de fitness, tel que Google Fit, comptant les pas même lorsque l’appareil est verrouillé.
- Des outils de navigation comme Google Maps, offrant un guidage fluide.
Catégories de services au premier plan
L’évolution des services au premier plan a franchi un cap avec Android 10, introduisant l’attribut android:foregroundServiceType
dans l’élément <service>
. Initialement crucial pour les services nécessitant des permissions de localisation, caméra ou microphone, il impose désormais une déclaration obligatoire sous Android 14 pour garantir une utilisation cohérente.
Voici les types de services disponibles :
camera
— Pour les applications accédant à la caméra en arrière-plan (appels vidéo, etc.).connectedDevice
— Pour les interactions avec des appareils externes (ex. : gadgets Bluetooth).dataSync
— Obsolète ; privilégier des alternatives commeDownloadManager
.health
(nouveau) — Fonctions liées à la santé, comme le suivi d’exercice.location
— Essentiel pour les services basés sur la localisation.mediaPlayback
— Pour la diffusion audio ou vidéo en arrière-plan.mediaProjection
— Projection de contenu vers des écrans externes.microphone
— Pour les applications utilisant le microphone en arrière-plan.phoneCall
— Facilite les appels en cours.remoteMessaging
(nouveau) — Transfert de messages entre appareils.shortService
— Exécute des tâches courtes (environ 3 minutes max.).specialUse
— Cas d’utilisation spécifiques.systemExempted
— Réservé aux applications système.
Déclaration du type de service au premier plan
La mise à jour de votre fichier AndroidManifest
pour spécifier le type de service approprié est essentielle pour la compatibilité avec Android 14.
Si votre service en englobe plusieurs, combinez-les avec l’opérateur |
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<service
android:name=".MyForegroundService"
android:foregroundServiceType="camera|location|microphone"
android:exported="false">
</service>
</manifest>
Lancer un service sans type déclaré entraîne une MissingForegroundServiceTypeException
lors de l’appel à startForeground()
.
Permissions spécifiques aux services au premier plan
Depuis Android 9 (API 28
), les applications doivent déclarer FOREGROUND_SERVICE
dans leur manifeste :
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
Sous Android 14, des permissions spécifiques au type de service sont requises, comme FOREGROUND_SERVICE_CONNECTED_DEVICE
pour l’interaction Bluetooth :
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE"/>
L’absence de ces permissions génère une SecurityException
.
Précision dans l’appel à startForeground
L’utilisation de ServiceCompat.startForeground()
dans onStartCommand()
est impérative pour activer le service au premier plan :
ServiceCompat.startForeground(
this,
id,
notification,
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
} else {
0
}
)
startForeground()
doit être appelé dans les 10 secondes suivant onStartCommand()
pour éviter l’exception ForegroundServiceDidNotStartInTimeException
.
Permissions d’exécution
Chaque type de service exige des permissions distinctes à obtenir avant de l’initialiser, sous peine d’erreur.
Les connexions Bluetooth nécessitent l’une des permissions suivantes :
- Manifest :
CHANGE_NETWORK_STATE
,CHANGE_WIFI_STATE
,NFC
, etc. - Exécution :
BLUETOOTH_CONNECT
,BLUETOOTH_ADVERTISE
, etc.
Détails complets sur les exigences ici.
Configuration correcte des notifications
Les services au premier plan doivent afficher une notification visible en permanence. Depuis Android 13, cela nécessite la permission POST_NOTIFICATIONS
:
- Consentement accordé = notification visible.
- Refusé = activité en arrière-plan affichée dans le gestionnaire de tâches.
- Non demandé = même comportement qu’un refus.
Déclarations sur Google Play Console
Pour Android 14, les développeurs doivent justifier l’utilisation des services au premier plan, incluant une vidéo de démonstration et des explications détaillées. Instructions ici.
Conclusion
Android 14 impose des normes strictes sur les services au premier plan. En suivant ces recommandations, vous garantirez la conformité avec l’API 34.
Ressources supplémentaires :