mots clés: wear, media, collection_guideslandingwear
Ce guide explique comment les applications sous Wear OS peuvent utiliser des API Android bien connues pour lire du contenu audio.
Détecter les appareils audio
Une application Wear OS doit d'abord détecter si l'accessoire connecté est pourvu d'une sortie audio appropriée. Les développeurs peuvent s'attendre à ce que les accessoires connectés disposent d'au moins l'une des sorties audio suivantes :
AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
: sur les appareils équipés d'un haut-parleur intégréAudioDeviceInfo.TYPE_BLUETOOTH_A2DP
: Lorsqu'un casque Bluetooth est associé et connectéAudioDeviceInfo.TYPE_BLE_BROADCAST
: Lorsqu'un appareil de groupe de broadcast Bluetooth à basse consommation (BLE) est associé et connectéAudioDeviceInfo.TYPE_BLE_HEADSET
: Lorsqu'un casque BLE est associé et connectéAudioDeviceInfo.TYPE_BLE_SPEAKER
: Lorsqu'une enceinte BLE est associée et connectée
Dans l'exemple suivant, l'application utilise la méthode getDevices()
avec la valeur FEATURE_AUDIO_OUTPUT
pour énumérer toutes les sorties audio.
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); fun audioOutputAvailable(type: Int): Boolean { if (!packageManager.hasSystemFeature(PackageManager.FEATURE_AUDIO_OUTPUT)) { return false } return audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS).any { it.type == type } } // True if the device has a speaker audioOutputAvailable(AudioDeviceInfo.TYPE_BUILTIN_SPEAKER) // True if a Bluetooth headset is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) // True if a BLE broadcast group device is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) // True if a BLE headset is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) // True if a BLE speaker is paired and connected audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)
Pour offrir une expérience utilisateur optimale, votre application ne doit lire les contenus multimédias que lorsque des écouteurs ou des enceintes Bluetooth sont connectés à la montre.
Sélectionner l'appareil par défaut pour la sortie audio
Choisissez la manière dont vous souhaitez que les utilisateurs interagissent avec la sortie audio de votre application en fonction du cas d'utilisation et de l'importance du son pour l'expérience de base.
Autoriser l'utilisateur à choisir l'appareil de sortie multimédia
À partir de Wear OS 5, le système fournit une UI qui permet aux utilisateurs de choisir l'appareil sur lequel lire les contenus multimédias et d'afficher des informations sur le contenu multimédia en cours de lecture.
Si votre application détecte qu'aucun casque Bluetooth n'est connecté lorsque vous souhaitez fournir une lecture audio sur des appareils exécutant Wear OS 5 ou une version ultérieure, proposez à l'utilisateur d'accéder directement au sélecteur de sortie multimédia. Sur les appareils qui ne sont pas compatibles avec le sélecteur de sortie multimédia, appelez l'action d'intent ACTION_BLUETOOTH_SETTINGS
, qui redirige l'utilisateur vers la page Bluetooth dans les paramètres système.
La méthode launchOutputSelection()
, qui fait partie de la bibliothèque Horologist sur GitHub, montre comment permettre à l'utilisateur de choisir son périphérique de sortie multimédia.
Casque Bluetooth
Contrairement aux haut-parleurs intégrés, qui sont toujours disponibles si l'appareil en est équipé, un casque Bluetooth peut être associé ou dissocié pendant l'exécution d'une l'application. Si l'application nécessite un casque pour continuer, enregistrez un rappel pour détecter le moment où l'utilisateur connecte et déconnecte un casque Bluetooth à l'aide de registerAudioDeviceCallback
:
audioManager.registerAudioDeviceCallback(object : AudioDeviceCallback() { override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesAdded(addedDevices) if (audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET) || audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER)) { // A Bluetooth or BLE device is connected and available for playback. } } override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>?) { super.onAudioDevicesRemoved(removedDevices) if (!(audioOutputAvailable(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_BROADCAST)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_HEADSET)) && !(audioOutputAvailable(AudioDeviceInfo.TYPE_BLE_SPEAKER))) { // No Bluetooth or BLE devices are connected anymore. } } }, null)
Si votre application détecte qu'aucun casque Bluetooth n'est connecté lorsque vous souhaitez fournir une sortie audio, n'affichez pas de message d'erreur. Proposez plutôt de rediriger l'utilisateur directement vers les paramètres Bluetooth pour lui permettre de se connecter plus facilement. Pour ce faire, envoyez un intent avec ACTION_BLUETOOTH_SETTINGS
:
val intent = with (Intent(Settings.ACTION_BLUETOOTH_SETTINGS)) { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) putExtra("EXTRA_CONNECTION_ONLY", true) putExtra("EXTRA_CLOSE_ON_CONNECT", true) putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 1) } startActivity(intent)
Haut-parleurs
La plupart des appareils Wear OS sont équipés de haut-parleurs. Si votre application propose un cas d'utilisation non multimédia qui intègre du son, envisagez d'utiliser des haut-parleurs pour ajouter une dimension supplémentaire et renforcer l'engagement de l'utilisateur. Par exemple, un appareil Wear OS équipé d'un haut-parleur peut déclencher une alarme ou un minuteur, avec une notification audio. Les applications de fitness peuvent également utiliser le haut-parleur pour fournir des instructions sur un exercice.
Remarque : Les haut-parleurs n'offrent pas une expérience optimale pour écouter des contenus multimédias, car ils n'ont pas été conçus à cet effet.
Pour en savoir plus, consultez WearSpeakerSample.
Lire l'audio
Une fois que vous avez détecté et sélectionné une sortie audio appropriée, le processus de lecture audio sur Wear OS est le même que sur un appareil mobile ou sur d'autres appareils. Pour en savoir plus, consultez Présentation de MediaPlayer. Pour accéder plus facilement à des fonctionnalités plus avancées, comme la lecture en streaming et le téléchargement de contenus multimédias, utilisez ExoPlayer. Veillez à suivre les bonnes pratiques pour les applications audio, comme Gérer la priorité audio.
Empêcher la lecture involontaire de contenus multimédias sur les haut-parleurs
Vous pouvez suivre les conseils suivants pour éviter que votre application multimédia lance involontairement des contenus sur les haut-parleurs intégrés de la montre. Les instructions varient selon le lecteur utilisé par l'application.
ExoPlayer
Si votre application utilise ExoPlayer :
Appelez setSuppressPlaybackOnUnsuitableOutput(true) lors de la création de l'instance ExoPlayer :
ExoPlayer exoplayer = ExoPlayer.Builder(context) .setAudioAttributes(...) .setSuppressPlaybackWhenUnsuitableOutput(true) // ... .build()
-
Réagissez à l'événement de suppression de lecture en enregistrant WearUnsuitableOutputPlaybackSuppressionResolverListener comme écouteur de l'instance ExoPlayer :
exoPlayer.addListener(WearUnsuitableOutputPlaybackSuppressionResolverListener(context))
Kit d'outils Horologist Media
Le Kit d'outils Horologist Media contient déjà une logique permettant d'éviter la lecture involontaire de contenus multimédias sur les haut-parleurs intégrés de la montre.
Autres lecteurs multimédias
- Assurez-vous que la lecture audio des contenus multimédias ne démarre que si un périphérique de sortie adapté, tel qu'un casque ou un ensemble d'enceintes externes, est connecté à la montre. Vous trouverez ci-dessous la liste pour connaître les périphériques de sortie adaptés aux applications multimédias :
- Mettez la lecture en pause si AudioManager informe votre application qu'un périphérique de sortie audio externe est déconnecté de la montre.
- Si l'utilisateur tente de lancer la lecture d'un contenu multimédia sans avoir connecté aucun appareil audio externe, invitez-le à connecter un appareil de ce type à sa montre.