Communication en arrière-plan

Ce guide explique comment prendre en charge les principaux cas d'utilisation de la communication avec des périphériques lorsque votre application s'exécute en arrière-plan:

Il existe plusieurs options pour prendre en charge chacun de ces cas d'utilisation. Chacune d'entre elles présente des avantages et des inconvénients qui peuvent la rendre plus ou moins adaptée à vos besoins spécifiques.

Le schéma suivant présente une vue simplifiée des conseils de cette page:

Trouver un appareil

Tout d'abord, votre application doit trouver un appareil auquel se connecter. Pour trouver un appareil BLE, vous pouvez utiliser l'une des API suivantes:

En arrière-plan

Il n'existe aucune limite concernant l'utilisation de l'une ou l'autre de ces API lorsque l'application n'est pas visible, mais elles ont toutes deux besoin que le processus de votre application soit actif. Si le processus de l'application n'est pas en cours d'exécution, vous pouvez utiliser les solutions suivantes:

Connexion à un appareil

Pour vous connecter à un appareil après l'avoir trouvé, vous devez obtenir une instance BluetoothDevice pour l'appareil à partir de l'une des sources suivantes:

Une fois que vous disposez d'une instance BluetoothDevice, vous pouvez lancer une requête de connexion à l'appareil correspondant en appelant l'une des méthodes connectGatt(). La valeur que vous transmettez dans la valeur booléenne autoConnect définit lequel des deux modes de connexion suivants le client GATT utilise:

  • Direct Connect (autoconnect = false) (Connexion directe): tente de se connecter directement au périphérique et échoue s'il n'est pas disponible. En cas de déconnexion, le client GATT n'essaie pas automatiquement de se reconnecter.
  • Connexion automatique (autoconnect = true): tente de se connecter automatiquement au périphérique dès qu'il est disponible. En cas de déconnexion déclenchée par le périphérique ou parce que le périphérique est hors de portée, le client GATT tente automatiquement de se reconnecter lorsque le périphérique est disponible.

En arrière-plan

Il n'existe aucune restriction concernant la connexion à un appareil lorsque l'application est exécutée en arrière-plan, bien que la connexion soit fermée si votre processus est arrêté. En outre, des restrictions s'appliquent au démarrage des activités (sur Android 10 et versions ultérieures) ou aux services de premier plan (sous Android 12 et versions ultérieures) en arrière-plan.

Ainsi, pour établir une connexion en arrière-plan, les applications peuvent utiliser les solutions suivantes:

Rester connecté à un appareil

Idéalement, les applications doivent maintenir les connexions aux périphériques aussi longtemps que nécessaire et se déconnecter une fois la tâche terminée. Toutefois, il existe deux cas où une application peut avoir besoin de maintenir une connexion active indéfiniment:

Dans les deux cas, les options suivantes sont disponibles:

Lorsque vous passez d'une application à une autre

Trouver un appareil, s'y connecter et transférer les données sont des processus chronophages et gourmands en ressources. Pour éviter de perdre la connexion et de devoir exécuter l'ensemble du processus chaque fois que l'utilisateur passe d'une application à une autre ou effectue des tâches simultanées, vous devez maintenir la connexion active jusqu'à la fin de l'opération. Vous pouvez utiliser un service de premier plan avec le type connectedDevice ou l'API de présence d'appareils associés.

En écoutant les notifications des périphériques

Pour écouter les notifications des périphériques, l'application doit appeler setCharacteristicNotification(), écouter les rappels à l'aide de onCharacteristicChanged() et maintenir la connexion active. Pour la plupart des applications, il est préférable de prendre en charge ce cas d'utilisation avec CompanionDeviceService, car l'application devra probablement continuer à écouter de la musique pendant de longues périodes. Toutefois, vous pouvez également utiliser un service de premier plan.

Dans les deux cas, vous pouvez vous reconnecter après l'arrêt d'un processus en suivant les instructions de la section Se connecter à un appareil.