Recommandations pour les appareils mobiles — Android

Cette rubrique aborde les points à prendre en compte lors du développement d'une application pour un appareil Android :

Permissions

Pour connaître les autorisations requises par le SDK Android d'OpenTok, consultez la section « Autorisations » de la présentation du SDK Android.

Création d'une application VoIP à l'aide du ConnectionService d'Android

Utilisez Android Service de connexion cours visant à créer une application VoIP exploitant les fonctionnalités audio-vidéo du SDK Android d'OpenTok.

Pour créer une application VoIP de base, respectez au minimum les consignes suivantes :

  • Enregistrer le android.telecom.ConnectionService dans le fichier AndroidManifest.xml.

    <service android:name="com.example.package.MyConnectionService"
        android:label="@string/some_label_for_my_connection_service"
        android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
        <intent-filter>
            <action android:name="android.telecom.ConnectionService" />
        </intent-filter>
    </service>
    
  • Créer une classe qui étend la classe android.telecom.ConnectionService classe. Mettre en œuvre les méthodes de la classe ConnectionService y compris onCreateIncomingConnection(), onCreateOutgoingConnection, onCreateIncomingConnectionFailed()et onCreateOutgoingConnectionFailed().

  • Créer une classe qui étend la classe android.telecom.Connection classe. Mettre en œuvre les méthodes de la classe Connection y compris onAnswer() et onDisconnect. Dans la mise en œuvre de la onAnswer() méthode, vous pouvez vous connecter à une session OpenTok, publier un flux vers cette session et permettre à du code de s'abonner aux flux créés au sein de la session. Dans l'implémentation de la onDisconnect() méthode, vous pouvez vous déconnecter de la session OpenTok (et cesser de publier et de vous abonner aux flux).

  • Vous pouvez utiliser un service comme Google Firebase pour mettre en place des notifications push pour l'application. Vous pouvez configurer des notifications pour savoir quand votre application est en arrière-plan ou fermée. Ainsi, votre application peut recevoir un appel VoIP alors qu'elle est fermée.

Lorsque vous utilisez ConnectionService, utilisez le AudioDeviceManager.getAudioFocusManager() méthode et implémentez les méthodes de l'instance AudioFocusManager renvoyée afin de déléguer le contrôle du focus audio à votre application. Celles-ci sont définies dans le SDK Android d'OpenTok :

private AudioDeviceManager audioDeviceManager;
private AudioFocusManager audioFocusManager;

public void setupAudioFocusManager(Context context) {
  audioDeviceManager = new AudioDeviceManager(context);
  audioFocusManager = audioDeviceManager.getAudioFocusManager();
  audioFocusManager.setRequestAudioFocus(false);
}

public void notifyAudioFocusIsActive() {
  audioFocusManager.audioFocusActivated();
}

public void notifyAudioFocusIsInactive() {
  audioFocusManager.audioFocusDeactivated();
}

Lorsque le focus audio est délégué à l'application, le SDK interrompt son routage audio automatique. Cette logique de routage est alors prise en charge par ConnectionService, qui informe l'application des périphériques audio disponibles via les API CallEndpoint et CallAudioState de Connection. Votre application doit prendre en charge l'énumération des périphériques audio et la logique de sélection.

Cette délégation assure un routage audio correct et une coordination avec le système Android Telecom.

Voir le exemple d'application VOIP dans le dépôt « opentok-android-sdk-samples ». Il explique comment implémenter la classe ConnectionService pour créer une application VoIP utilisant le SDK Android d'OpenTok.

Configuration des services en avant-plan

Les services en premier plan vous permettent d'effectuer de manière asynchrone des opérations perceptibles par l'utilisateur. Les services en premier plan affichent une notification dans la barre d'état afin d'informer les utilisateurs que votre application effectue une tâche en premier plan et consomme des ressources système. Notez que le service ConnectionService peut être utilisé comme service en premier plan. Voici quelques exemples d'utilisation des services en premier plan :

  • Continuez à capturer et à envoyer des données audio à vos homologues, même lorsque l'utilisateur ouvre une autre application.

  • Permettre à un utilisateur de partager son écran lorsqu'il passe d'une application à l'autre.

  • Permettre aux utilisateurs d'éteindre l'écran tout en continuant à écouter un appel vidéo.

Types de services exogènes

Android 10 a introduit l'attribut `android:foregroundServiceType` au sein de l'élément. L'objectif est de préciser explicitement la nature des tâches effectuées par le service.

Android 14 rend obligatoire la spécification du type de service d'avant-plan. Cette mesure vise à garantir l'utilisation correcte des services d'avant-plan et la cohérence entre les différents fabricants d'appareils.

Les types actuellement pris en charge sont les suivants :

  • camera (obligatoire sous Android 11) — Lors de l'accès à l'appareil photo depuis l'arrière-plan, par exemple dans les applications d'appel vidéo

  • connectedDevice — Lors de l'interaction avec un appareil externe, tel qu'un appareil de fitness Bluetooth

  • dataSync — Lors du téléchargement ou de l'envoi de données, cette méthode sera obsolète ; il convient d'utiliser à la place des alternatives telles que DownloadManager, BackupManager ou WorkManager.

  • health (nouveauté d'Android 14) — Pour les applications de fitness telles que les applications de suivi d'activité physique

  • location (obligatoire sous Android 10) — Lorsque la localisation est requise, par exemple pour la navigation

  • mediaPlayback — Lors de la reprise de la lecture d'un fichier audio ou vidéo en arrière-plan, comme sur Spotify ou Netflix

  • mediaProjection — Lors de la projection de contenu sur des appareils ou des écrans externes

  • microphone (obligatoire sous Android 11) — Lors de l'accès au microphone en arrière-plan, par exemple par les applications d'appel

  • phoneCall — Lors de la reprise d'un appel en cours

  • remoteMessaging (nouveau dans Android 14) - lors du transfert de messages texte d'un appareil à l'autre

  • shortService — Lorsqu’un service doit exécuter rapidement une tâche critique qui ne peut pas être interrompue (durée d’exécution limitée à environ 3 minutes)

  • specialUse — Lorsque les autres types ne correspondent pas à votre cas d'utilisation

  • systemExempted — Réservé aux applications système

Déclarer le type de service d'avant-plan

La première étape de la prise en charge d'Android 14 consiste à mettre à jour votre déclaration de service dans le fichier AndroidManifest et à spécifier le type de service d'avant-plan correct.

Si votre service nécessite plusieurs types, vous pouvez les combiner en utilisant l'opérateur | comme suit :

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
    <service
        android:name=".MyForegroundService"
        android:foregroundServiceType="microphone|camera"
        android:exported="false">
    </service>
</manifest>

Si vous essayez de démarrer un service en avant-plan sans déclarer son type dans le manifeste, le système émettra un MissingForegroundServiceTypeException lors de l'appel startForeground().

Demander des autorisations spécifiques pour les services en premier plan

À partir d'Android 9 (API 28), les applications devaient demander l'autorisation FOREGROUND_SERVICE dans le manifeste de l'application, qui a été accordée automatiquement par le système.

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>

À partir d'Android 14 (API 34), les applications doivent demander des autorisations supplémentaires en fonction du type de service exécuté au premier plan. Ainsi, si votre service continue d'accéder au microphone en arrière-plan, vous devez spécifier FOREGROUND_SERVICE_MICROPHONE. L'autorisation est automatiquement accordée par le système.

<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE"/>

Si votre service utilise plusieurs types, vous devez déclarer cette autorisation pour chaque type.

Si vous oubliez de déclarer l'une de ces deux autorisations, vous recevrez un SecurityException en précisant la raison exacte.

Lancer un service d'avant-plan

En fonction du niveau d'API utilisé, lancez le service comme suit :

Intent serviceIntent = new Intent(this, MyForegroundService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android 8.0 (API 26) and above
    startForegroundService(serviceIntent);
} else { // Android 7.0 (API 24, 25)
    startService(serviceIntent);
}

Cet extrait de code lance un service. Cependant, ce service ne s'exécute pas encore au premier plan. Au sein même du service, vous devez appeler startForeground() pour faire passer le service au premier plan. Si vous utilisez AndroidX, vous devez appeler ServiceCompat.startForeground().

Fournissez les détails de votre cas d'utilisation sur Google Play Console

Après avoir téléchargé la nouvelle version de l'application qui cible Android 14 et utilise un type de service d'avant-plan dans la Google Play Console, vous verrez apparaître dans votre console une invite à fournir des détails supplémentaires sur votre utilisation.

Google souhaitant s'assurer que les applications utilisent les services de premier plan de manière appropriée, vous devrez soumettre une nouvelle déclaration sur la page Contenu de l'application (Règles -> Contenu de l'application).

Pour chaque type de service d'avant-plan que vous déclarez, vous devez effectuer les opérations suivantes :

  • Décrivez les fonctionnalités de l'application qui utilisent le type de service « en avant-plan ».

  • Décrire l'impact sur l'utilisateur si la tâche est reportée ou interrompue par le système.

  • Incluez un lien vers une vidéo démontrant chaque fonctionnalité de service d'avant-plan. La vidéo doit montrer les étapes que l'utilisateur doit suivre dans votre application pour déclencher la fonctionnalité.

  • Choisissez votre cas d'utilisation spécifique pour chaque type de service en avant-plan. Vous pouvez choisir parmi une liste prédéfinie de cas d'utilisation énumérés ici ou les saisir manuellement.

Application d'exemple et informations complémentaires

Voir le Chat vidéo de base avec services en premier plan - Java dans l'échantillon opentok-android-sdk-samples repo.

Plus d'informations dans le site Android Aperçu des services exogènes documentation.

Plus d'informations

Pour plus d'informations, consultez :