Sur les appareils Wear OS, les cartes sont affichées par deux composants clés avec une gestion des versions indépendante. Pour vous assurer que les cartes de vos applications fonctionnent correctement sur tous les appareils, il est important de comprendre cette architecture sous-jacente.
- Bibliothèques liées aux cartes Jetpack: ces bibliothèques (y compris Wear Tiles et Wear ProtoLayout) sont intégrées à votre application, et vous, en tant que développeur, contrôlez leurs versions. Votre application utilise ces bibliothèques pour créer un objet
TileBuilder.Tile
(la structure de données représentant votre carte) en réponse à l'appelonTileRequest()
du système. - ProtoLayout Renderer:ce composant système est responsable de l'affichage de l'objet
Tile
à l'écran et de la gestion des interactions utilisateur. La version du moteur de rendu n'est pas contrôlée par le développeur de l'application et peut varier d'un appareil à l'autre, même ceux dont le matériel est identique.
L'apparence ou le comportement d'une carte peut varier en fonction des versions de la bibliothèque Jetpack Tiles de votre application et de la version du moteur de rendu ProtoLayout sur l'appareil de l'utilisateur. Par exemple, un appareil peut prendre en charge la rotation ou l'affichage des données de fréquence cardiaque, et un autre non.
Ce document explique comment vous assurer que votre application est compatible avec différentes versions de la bibliothèque Tiles et du moteur de rendu ProtoLayout, et comment migrer vers des versions supérieures de la bibliothèque Jetpack.
Tenir compte de la compatibilité
Pour créer une carte qui fonctionne correctement sur une gamme d'appareils, vous devez tenir compte des points suivants.
Détecter la version du moteur de rendu
- Utilisez la méthode
getRendererSchemaVersion()
de l'objetDeviceParameters
transmis à votre méthode onTileRequest(). Cette méthode renvoie les numéros de version majeure et mineure du moteur de rendu ProtoLayout sur l'appareil. - Vous pouvez ensuite utiliser une logique conditionnelle dans votre implémentation
onTileRequest()
pour adapter la conception ou le comportement de votre carte en fonction de la version du moteur de rendu détectée.- Par exemple, si une animation spécifique n'est pas prise en charge, vous pouvez afficher une image statique à la place.
@RequiresSchemaVersion
annotation
- L'annotation
@RequiresSchemaVersion
sur les méthodes ProtoLayout indique la version minimale du schéma du moteur de rendu requise pour que cette méthode se comporte comme indiqué dans la documentation (exemple).- Bien que l'appel d'une méthode nécessitant une version de rendu supérieure à celle disponible sur l'appareil ne provoque pas le plantage de votre application, il peut entraîner l'absence d'affichage du contenu ou l'ignorer.
Exemple
override fun onTileRequest(
requestParams: TileService.TileRequest
): ListenableFuture<Tile> {
val rendererVersion =
requestParams.deviceConfiguration.rendererSchemaVersion
val tile = Tile.Builder()
if (
rendererVersion.major > 1 ||
(rendererVersion.major == 1 && rendererVersion.minor >= 300)
) {
// Use a feature supported in renderer version 1.300 or later
tile.setTileTimeline(/* ... */ )
} else {
// Provide fallback content for older renderers
tile.setTileTimeline(/* ... */ )
}
return Futures.immediateFuture(tile.build())
}
Tester avec différentes versions du moteur de rendu
Pour tester vos cartes sur différentes versions de moteur de rendu, déployez-les sur différentes versions de l'émulateur Wear OS. (Sur les appareils physiques, les mises à jour du moteur de rendu ProtoLayout sont fournies par le Play Store ou les mises à jour du système. Il n'est pas possible de forcer l'installation d'une version de rendu spécifique.)
La fonctionnalité d'aperçu des cartes d'Android Studio utilise un moteur de rendu intégré à la bibliothèque Jetpack ProtoLayout sur laquelle votre code dépend. Une autre approche consiste donc à dépendre de différentes versions de la bibliothèque Jetpack lors des tests des cartes.
Mettre à niveau les bibliothèques Jetpack
Mettez à jour vos bibliothèques de cartes Jetpack pour profiter des dernières améliorations, y compris des modifications de l'interface utilisateur pour intégrer vos cartes de manière transparente au système.
Migrer vers Tiles 1.2 / ProtoLayout 1.0
Depuis la version 1.2, la plupart des API de mise en page de cartes se trouvent dans l'espace de noms androidx.wear.protolayout
. Pour utiliser les dernières API, suivez la procédure de migration suivante dans votre code.
Mettre à jour les dépendances
Dans le fichier de compilation de votre module d'application, apportez les modifications suivantes :
Groovy
// Removeimplementation 'androidx.wear.tiles:tiles-material:version'// Include additional dependencies implementation "androidx.wear.protolayout:protolayout:1.2.1" implementation "androidx.wear.protolayout:protolayout-material:1.2.1" implementation "androidx.wear.protolayout:protolayout-expression:1.2.1" // Update implementation "androidx.wear.tiles:tiles:1.4.1"
Kotlin
// Removeimplementation("androidx.wear.tiles:tiles-material:version")// Include additional dependencies implementation("androidx.wear.protolayout:protolayout:1.2.1") implementation("androidx.wear.protolayout:protolayout-material:1.2.1") implementation("androidx.wear.protolayout:protolayout-expression:1.2.1") // Update implementation("androidx.wear.tiles:tiles:1.4.1")
Mettre à jour les espaces de noms
Dans les fichiers de code basés sur Kotlin et Java de votre application, effectuez les mises à jour suivantes. Vous pouvez également exécuter ce script de modification du nom d'un espace de noms.
- Remplacez toutes les importations
androidx.wear.tiles.material.*
parandroidx.wear.protolayout.material.*
. Effectuez également cette étape pour la bibliothèqueandroidx.wear.tiles.material.layouts
. Remplacez la plupart des autres importations
androidx.wear.tiles.*
parandroidx.wear.protolayout.*
.Les importations pour
androidx.wear.tiles.EventBuilders
,androidx.wear.tiles.RequestBuilders
,androidx.wear.tiles.TileBuilders
etandroidx.wear.tiles.TileService
ne doivent pas changer.Renommez quelques méthodes obsolètes des classes TileService et TileBuilder :
TileBuilders
:getTimeline()
engetTileTimeline()
, etsetTimeline()
ensetTileTimeline()
TileService
:onResourcesRequest()
enonTileResourcesRequest()
RequestBuilders.TileRequest
:getDeviceParameters()
engetDeviceConfiguration()
,setDeviceParameters()
ensetDeviceConfiguration()
,getState()
engetCurrentState()
, etsetState()
ensetCurrentState()
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé
- Premiers pas avec les cartes
- Créer votre première carte dans Wear OS
- Présentation de Compose pour la télévision