1. Bienvenue
Conçu dans le but d'unifier les normes IoT, Matter connecte les appareils pour la maison connectée dans différents écosystèmes comme Google Home, Zigbee, Bluetooth Mesh, Z-Wave et plus encore.
Les appareils mobiles sont un point d'interaction central avec les appareils connectés. Si vous souhaitez créer vos propres applications Android pour prendre en charge les appareils Matter, nous pouvons vous aider à démarrer rapidement.
L'application exemple Google Home pour Matter (GHSA pour Matter) présente les API du SDK Home Mobile, qui permettent aux utilisateurs de configurer et de partager des appareils. Vous pouvez également utiliser l'application exemple comme outil d'apprentissage pour mieux comprendre les concepts clés de Matter, ainsi que comme outil de débogage et de dépannage des interactions avec les appareils Matter.
Objectifs de l'atelier
Dans cet atelier de programmation, vous allez télécharger le code source de l'application exemple et apprendre à utiliser le SDK Home Mobile pour mettre en service et partager des appareils. Vous apprendrez également à utiliser les bibliothèques de mise en service et de cluster du dépôt Matter (connectedhomeip).
Après avoir téléchargé l'application exemple, nous examinerons le code source dans Android Studio et implémenterons les API Home Mobile SDK suivantes :
Vous en saurez également plus sur les concepts de mise en service, les fabrics Matter et le contrôle des appareils Matter.
Prérequis
Avant de commencer, assurez-vous d'avoir effectué les étapes suivantes :
- Consultez le Guide de l'application exemple Google Home pour Matter.
- Téléchargez Android Studio.
- Disposer d'un appareil Android O (8.1, niveau d'API 27) ou version ultérieure pour les tests. Pour vous assurer que votre appareil est compatible avec la dernière version de Matter, consultez le guide Vérifier les modules et services Matter.
- Utilisez un appareil Matter avec des fonctionnalités d'activation/désactivation. Pour minimiser les problèmes d'environnement, nous vous recommandons vivement de commencer par utiliser le périphérique virtuel Matter (MVD). Si vous rencontrez des problèmes, il sera beaucoup plus facile de les examiner si l'application exemple est utilisée avec MVD. Voici quelques autres options :
- Créez un appareil virtuel Matter avec l'application
rootnode_dimmablelight_bCwGYSDpoe. Lorsque vous créez une intégration Matter dans la Home Developer Console, utilisez0xFFF1comme ID fournisseur et0x8000comme ID produit. - Créez un appareil Espressif avec
all-clusters-app. Lorsque vous créez une intégration Matter dans la Home Developer Console, utilisez0xFFF1comme ID fournisseur et0x8001comme ID produit.
- Créez un appareil virtuel Matter avec l'application
- Découvrez comment configurer les services Google Play.
Vous n'avez pas besoin de hub, par exemple un Google Nest Hub (2e génération), pour mettre en service et contrôler des appareils avec l'application exemple.
2. Configuration
L'application de démarrage de l'atelier de programmation se trouve dans la branche codelab. Pour commencer à travailler avec le code source de l'atelier de programmation, vous pouvez télécharger le fichier ZIP.
Vous utiliserez ce fichier ZIP codelab pour créer un exemple fonctionnel.
Versions de l'atelier de programmation
La branche codelab est taguée avec la version 2.0.0 de l'application exemple. Pour comparer vos mises à jour à chaque étape, vous pouvez télécharger le code source complet de cette version.
Si vous souhaitez cloner le dépôt GitHub, suivez les instructions du fichier README de l'exemple d'application.
Dépendances
Nous vous guiderons à travers le code source requis pour partager et mettre en service des appareils, mais il peut être utile de connaître les dépendances suivantes avant de commencer. Notez que ces dépendances sont déclarées dans le fichier libs.versions.toml et que leur utilisation est spécifiée dans le fichier build.gradle.kts.
- SDK Home pour mobile
- Bibliothèques du SDK Matter
- Jetpack Compose. L'UI est entièrement implémentée à l'aide de Compose.
- Material Design. Pour en savoir plus, consultez MDC-103 Android : Utilisation des thèmes de Material Design (couleur, élévation et type) (Kotlin) et Material Theme Builder.
- Proto DataStore, utilisé pour conserver les données de l'application. Les dépôts et les sérialiseurs Datastore sont stockés dans
java/data, y compris les schémas pour les appareils et les préférences utilisateur. Pour en savoir plus sur DataStore, consultez Travailler avec Proto DataStore. - Hilt pour conserver les données et prendre en charge l'injection de dépendances.
Code source
L'interface utilisateur et la plupart des fonctionnalités ont déjà été créées pour vous.
Pour cet atelier de programmation, nous allons ajouter la fonctionnalité Matter aux fichiers suivants :
java/com/google/homesampleapp/commissioning/AppCommissioningService: vous permet de mettre en service des appareils sur le réseau de développement.java/com/google/homesampleapp/screens/home/HomeScreenetjava/com/google/homesampleapp/screens/home/HomeViewModel.kt: incluent la fonctionnalité de mise en service du SDK Home Mobilejava/com/google/homesampleapp/screens/device/DeviceScreenetjava/com/google/homesampleapp/screens/device/DeviceViewModel: incluent les appels d'API Share Device
Chaque fichier est commenté avec le bloc de code que vous allez modifier. Par exemple :
// CODELAB: add commissioningFunction()
Cela vous permet de localiser rapidement la section correspondante dans l'atelier de programmation.
3. Commission à Google
Avant de pouvoir contrôler des appareils et leur permettre de communiquer entre eux au sein d'un même réseau, ils doivent être mis en service par un commissaire, qui est dans ce cas cette application exemple, l'application exemple Google Home pour Matter.
Il est important de comprendre les concepts suivants concernant la mise en service Matter :
- Les fabrics permettent aux appareils de communiquer entre eux.
- Les fabrics conservent un ensemble partagé d'identifiants uniques.
- Les écosystèmes sont responsables de l'émission de certificats racine de confiance, de l'attribution d'ID de structure et de l'attribution d'ID de nœud uniques. Un écosystème est le service de backend d'un commissaire, par exemple Home Graph pour l'écosystème Google Home.
- Les appareils peuvent être mis en service dans plusieurs fabrics (fonctionnalité multi-administrateur).
Pour mettre en service un appareil, vous devez utiliser l'API CommissioningClient. Un appel à .commissionDevice() renvoie un IntentSender, qui lance l'activité appropriée dans les services Google Play :
interface CommissioningClient {
Task<IntentSender> commissionDevice(CommissioningRequest request);
}
Dans les sections suivantes, nous allons passer en revue le code minimal requis pour mettre en service des appareils sur le réseau Google.
Étape 1 : Lanceur d'activités
Pour gérer le IntentSender à partir du CommissioningClient, vous pouvez utiliser un ActivityResultLauncher :
val commissioningLauncher = registerForActivityResult(
StartIntentSenderForResult()
) { result: ActivityResult ->
if (result.resultCode == RESULT_OK) {
Timber.d(TAG, "Commissioning succeeded.")
} else {
Timber.d(TAG, "Commissioning failed. " + result.resultCode)
}
}
Étape 2 : Fonction de mise en service
Voici un exemple de base qui utilise l'API CommissioningClient pour mettre en service un appareil sur le réseau Google.
- Le processus de mise en service commence par la fonction
commissionDevice(). Tout d'abord, unCommissioningRequestest défini. Avec cette configuration par défaut, les appareils ne sont mis en service que sur le réseau local Android. Matterest le point d'entrée du SDK Home Mobile. Lors du prochain appel,.getCommissioningClientobtient un CommissioningClient parthis(Activity)..commissionDevice()accepte lesCommissioningRequest.- Enfin,
.addOnSuccessListenerest appelé pour traiterCommissioningResultet lancer l'activité Commission Device des services Google Play (GPS).
private fun commissionDevice() {
val request: CommissioningRequest = CommissioningRequest.builder().build()
Matter.getCommissioningClient(this)
.commissionDevice(request)
.addOnSuccessListener { result ->
commissioningLauncher.launch(IntentSenderRequest.Builder(result).build())
}
}
Le Local Android Fabric peut être utilisé via les paramètres Android pour simplifier le processus de mise en service de ses appareils sur d'autres fabrics.
Vous allez maintenant apprendre à mettre en service un appareil dans un tissu de développement.
Pour obtenir une présentation de l'interface utilisateur pendant le processus de mise en service, consultez le Guide de l'application Google Home Sample pour Matter.
4. Mise en service d'un tissu de développement
Les appareils peuvent être mis en service dans plusieurs fabrics. Pour gérer les associations vérifiées, les appareils stockent un FabricTable contenant différents membres FabricInfo, par exemple :
- Identification de tissus
- ID de nœud attribué à l'appareil par le tissu
- ID du fournisseur
- ID de structure
- Identifiants opérationnels de l'appareil
Le gestionnaire de domaine administratif (ADM) définit les identifiants du réseau. Dans le scénario précédent, les services Google Play constituent l'écosystème qui fait office d'autorité de certification (CA) racine de confiance. Lorsque vous mettez en service des appareils dans le fabric Android local, chaque appareil inclut le même ensemble d'identifiants de fabric et le même ensemble d'AC.
Services de mise en service personnalisés
Pour mettre en service le tissu Local Android, nous avons utilisé les paramètres par défaut pour créer CommissioningRequest dans l'API CommissioningClient :
val request: CommissioningRequest = CommissioningRequest.builder().build()
Si vous souhaitez contrôler et gérer de nouveaux appareils depuis votre application, vous devez créer un tissu de développement local et obtenir les identifiants opérationnels pour mettre en service les appareils. Dans ce scénario, votre application devient un écosystème unique et indépendant qui attribue aux appareils les identifiants de nœud appropriés.
Vous pouvez informer le SDK Home Mobile que vous souhaitez mettre en service des appareils sur votre propre réseau en transmettant un service personnalisé à CommissioningRequest :
class CommissioningRequest {
static CommissioningRequest.Builder builder();
class Builder {
Builder setCommissioningService(@Nullable ComponentName commissioningService);
CommissioningRequest build();
}
}
Au cours des prochaines étapes, nous allons modifier la fonction commissionDevice() pour utiliser un service personnalisé. Nous ajouterons également un lanceur d'activité au fragment Home et utiliserons des objets LiveData pour gérer le flux d'API.
Étape 1 : Créez un lanceur d'activité GPS
Commençons par créer un lanceur d'activité pour gérer IntentSender à partir de l'API CommissioningClient.
- Ouvrez
HomeScreendans le dossierjava/com/google/homesampleapp/screens/home/. - Remplacez le commentaire
// CODELAB: commissionDeviceLauncher definitionpar le code suivant pour enregistrer et gérer le résultat de l'activité de mise en service :val commissionDeviceLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.StartIntentSenderForResult() ) { result -> // Commission Device Step 5. // The Commission Device activity in GPS (step 4) has completed. val resultCode = result.resultCode if (resultCode == Activity.RESULT_OK) { Timber.d("CommissionDevice: Success") // We let the ViewModel know that GPS commissioning has completed successfully. // The ViewModel knows that we still need to capture the device name and will\ // update UI state to trigger the NewDeviceAlertDialog. homeViewModel.gpsCommissioningDeviceSucceeded(result) } else { homeViewModel.commissionDeviceFailed(resultCode) } }
Étape 2 : Déclenchez l'action de mise en service de l'appareil
Dans cette étape, l'utilisateur déclenche l'action "Commission Device" (Mettre en service l'appareil) en cliquant sur le bouton "+" en bas à droite de l'écran d'accueil. Un appel est ensuite effectué à commissionDevice().
val onCommissionDevice = {
...
commissionDevice(activity!!.applicationContext, commissionDeviceLauncher)
}
Étape 3 : Appeler l'API
- Toujours dans
HomeScreen.kt, dans le dossierjava/com/google/homesampleapp/screens/home. - Remplacez le commentaire
// CODELAB: commissionDevicepar le commentaire suivant :commissionDeviceRequest.setCommissioningServicelieAppCommissioningServiceà une instanceCommissioningService, renvoyée dans une fonction de rappel. Lorsque vous transmettez un service personnalisé, le SDK Home Mobile met d'abord les appareils en service sur le réseau local Android, puis renvoie la charge utile d'intégration àAppCommissioningService.val commissionDeviceRequest = CommissioningRequest.builder() .setCommissioningService(ComponentName( context, AppCommissioningService::class.java)) .build() - Appelez
.getCommissioningClient(), puis.commissionDevice().
Matter.getCommissioningClient(context)
.commissionDevice(commissionDeviceRequest)
Pour compléter notre fonction commissionDevice, ajoutez un addOnSuccessListener et un addOnFailureListener :
.addOnSuccessListener { result ->
commissionDeviceLauncher.launch(IntentSenderRequest.Builder(result).build())
}
.addOnFailureListener { error ->
Timber.e(error)
}
5. Créer un service de mise en service
Dans la fonction commissionDevice(), nous avons demandé à obtenir un CommissioningService à partir de l'API CommissioningClient. Dans ce flux, l'API CommissioningClient met en service les appareils sur le réseau local Android, puis renvoie un rappel qui inclut l'objet CommissioningRequestMetadata :
public interface CommissioningService {
interface Callback {
void onCommissioningRequested(CommissioningRequestMetadata metadata);
}
}
Nous devons maintenant hériter de CommissioningService.Callback et fournir la fonctionnalité requise pour mettre en service les appareils dans notre exemple d'application. Voici un exemple d'implémentation de base de CommissioningService :
class MatterCommissioningService : Service(), CommissioningService.Callback {
private val commissioningServiceDelegate =
CommissioningService.Builder(this)
.setCallback(this)
.build()
override fun onBind(intent: Intent) = commissioningServiceDelegate.asBinder()
override fun onCommissioningRequested(metadata: CommissioningRequestMetadata) {
// perform commissioning
commissioningServiceDelegate
.sendCommissioningComplete(CommissioningCompleteMetadata.builder().build())
}
}
Étape 1 : Explorez le service AppCommissioningService personnalisé
Pour vous aider à démarrer, nous avons déjà défini la structure de classe de base pour notre CommissioningService personnalisé. Voici un aperçu rapide des fonctionnalités du service. Pour suivre, ouvrez AppCommissioningService dans java/commissioning.
Nous avons ajouté les importations suivantes pour les API Home Mobile SDK :
import com.google.android.gms.home.matter.commissioning.CommissioningCompleteMetadata import com.google.android.gms.home.matter.commissioning.CommissioningRequestMetadata import com.google.android.gms.home.matter.commissioning.CommissioningService
AppCommissioningService inclut également des bibliothèques du dépôt Matter (connectedhomeip) :
import com.google.homesampleapp.chip.ChipClient
Enfin, le service inclut des importations pour prendre en charge Hilt et les coroutines Kotlin.
Ensuite, nous créons le constructeur et configurons quelques éléments, y compris commissioningServiceDelegate, que nous utiliserons pour informer les services Google Play lorsque la mise en service est terminée.
private lateinit var commissioningServiceDelegate: CommissioningService ... commissioningServiceDelegate = CommissioningService.Builder(this).setCallback(this).build()
Il est maintenant temps d'ajouter les fonctions de mise en service.
Étape 2 : Remplacez onCommissioningRequested
Pour mettre en service des appareils dans le tissu de développement de l'application, procédez comme suit :
- Ouvrez
AppCommissioningServicedansjava/commissioning. - Localisez la fonction
onCommissioningRequested(). Nous avons fourni un message de journal qui affiche leCommissioningRequestMetadata. Remplacez le commentaire// CODELAB: onCommissioningRequested()pour démarrer la coroutineserviceScopeet obtenirdeviceId.// Perform commissioning on custom fabric for the sample app. serviceScope.launch { val deviceId = devicesRepository.incrementAndReturnLastDeviceId() - Effectuez la mise en service. Pour cette étape, nous pouvons transmettre les informations sur l'appareil renvoyées dans l'objet CommissioningRequestMetadata.
ChipClientutilise ces informations de métadonnées pour créer un canal sécurisé entre l'application GHSA pour Matter et votre appareil.try { Timber.d( "Commissioning: App fabric -> ChipClient.establishPaseConnection(): deviceId [${deviceId}]") chipClient.awaitEstablishPaseConnection( deviceId, metadata.networkLocation.ipAddress.hostAddress!!, metadata.networkLocation.port, metadata.passcode) Timber.d( "Commissioning: App fabric -> ChipClient.commissionDevice(): deviceId [${deviceId}]") chipClient.awaitCommissionDevice(deviceId, null) } catch (e: Exception) { Timber.e(e, "onCommissioningRequested() failed") // No way to determine whether this was ATTESTATION_FAILED or DEVICE_UNREACHABLE. commissioningServiceDelegate .sendCommissioningError(CommissioningError.OTHER) .addOnSuccessListener { Timber.d( "Commissioning: commissioningServiceDelegate.sendCommissioningError() succeeded") } .addOnFailureListener { e2 -> Timber.e(e2, "Commissioning: commissioningServiceDelegate.sendCommissioningError() failed") } return@launch } - Utilisez
commissioningServiceDelegatepour indiquer aux services Google Play que la mise en service est terminée. Dans.sendCommissioningComplete(), transmettez CommissioningCompleteMetadata.commissioningServiceDelegate .sendCommissioningComplete( CommissioningCompleteMetadata.builder().setToken(deviceId.toString()).build()) .addOnSuccessListener { Timber.d("Commissioning: commissioningServiceDelegate.sendCommissioningComplete() succeeded") } .addOnFailureListener { e -> Timber.e(e, "Commissioning: commissioningServiceDelegate.sendCommissioningComplete() failed") } }
Exécuter l'application
Maintenant que tout le code requis est en place pour la mise en service dans notre réseau local, il est temps de le tester. Choisissez votre appareil Android et exécutez l'application. Sur l'écran d'accueil, appuyez sur Ajouter un appareil et suivez la procédure pour mettre en service votre appareil.
Une fois la mise en service terminée, votre appareil participe désormais à deux fabrics : le fabric Android local et votre fabric de développement local. Chaque tissu possède son propre ensemble d'identifiants et un ID de tissu unique de 64 bits.
6. Contrôler des appareils
L'association à un réseau de développement vous permet d'utiliser les bibliothèques du dépôt Matter (connectedhomeip) pour contrôler les appareils à partir de l'application exemple.
Nous avons créé des classes d'assistance pour faciliter l'accès aux clusters d'appareils et l'envoi de commandes. Pour en savoir plus, ouvrez ClustersHelper dans java/clusters. Cet utilitaire Singleton importe les bibliothèques suivantes pour accéder aux informations sur l'appareil :
import chip.devicecontroller.ChipClusters import chip.devicecontroller.ChipStructs
Nous pouvons utiliser cette classe pour obtenir le cluster On/Off d'un appareil, puis appeler .toggle :
suspend fun toggleDeviceStateOnOffCluster(deviceId: Long, endpoint: Int) {
Timber.d("toggleDeviceStateOnOffCluster())")
val connectedDevicePtr =
try {
chipClient.getConnectedDevicePointer(deviceId)
} catch (e: IllegalStateException) {
Timber.e("Can't get connectedDevicePointer.")
return
}
return suspendCoroutine { continuation ->
getOnOffClusterForDevice(connectedDevicePtr, endpoint)
.toggle(
object : ChipClusters.DefaultClusterCallback {
override fun onSuccess() {
continuation.resume(Unit)
}
override fun onError(ex: Exception) {
Timber.e("readOnOffAttribute command failure: $ex")
continuation.resumeWithException(ex)
}
})
}
}
Activer/Désactiver un appareil
Une fois un appareil mis en service, la charge utile renvoyée dans CommissioningResult est ajoutée au DataStore. Cela permet à notre application d'accéder aux informations de l'appareil que nous pouvons utiliser pour envoyer des commandes.
Les applications Matter sont basées sur des événements. Lorsque la pile Matter est initialisée, les services de cluster écoutent les messages entrants. Une fois un appareil mis en service, les clients Matter envoient des commandes sur le canal opérationnel sécurisé établi lors de la mise en service de l'appareil.
Sur l'appareil, les paquets sont validés, déchiffrés, puis distribués avec un rappel. Les fonctions de rappel incluent EndpointId, ClusterId et AttributeId, accessibles depuis attributePath. Par exemple, ce code peut être implémenté sur un appareil Matter :
void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath & attributePath, uint8_t mask, uint8_t type,
uint16_t size, uint8_t * value)
{
// handle callback
ClusterId clusterId = attributePath.mClusterId;
AttributeId attributeId = attributePath.mAttributeId;
}
Au cours des prochaines étapes, vous utiliserez le SDK Matter et ClustersHelper pour activer ou désactiver un appareil.
- Accédez à
DeviceViewModeldansjava/screens/device. - Localisez la fonction
updateDeviceStateOn. - Remplacez le commentaire
// CODELAB: togglepar le code permettant d'appelerclustersHelper, puis mettez à jour le dépôt de l'appareil :Timber.d("Handling real device") try { clustersHelper.setOnOffDeviceStateOnOffCluster(deviceUiModel.device.deviceId, isOn, 1) devicesStateRepository.updateDeviceState(deviceUiModel.device.deviceId, true, isOn) } catch (e: Throwable) { Timber.e("Failed setting on/off state") }
Cette fonction est appelée à partir de DeviceScreen :
// On/Off Switch click.
val onOnOffClick: (value: Boolean) -> Unit = { value ->
deviceViewModel.updateDeviceStateOn(deviceUiModel!!, value)
}
Exécuter l'application
Exécutez l'application pour recharger vos mises à jour. Sur l'écran d'accueil, activez ou désactivez votre appareil.
7. Partager des appareils avec d'autres écosystèmes
Le partage d'un appareil est appelé flux multi-administrateur dans la spécification Matter.
Dans les étapes précédentes, nous avons appris que le SDK Home Mobile permet de mettre en service des appareils sur le réseau local Android et sur un réseau de développement pour l'application exemple. Il s'agit d'un exemple de flux multi-administrateur, dans lequel les appareils peuvent être mis en service sur plusieurs réseaux.
Vous pouvez désormais partager des appareils avec encore plus de tissus, en particulier si vous vivez dans une maison où chacun a ses propres préférences en matière d'applications et de plates-formes.
Le SDK Home Mobile fournit cette fonctionnalité dans l'API ShareDeviceRequest, ce qui vous permet de :
- Ouvrez une fenêtre de mise en service temporaire pour les appareils.
- Modifiez l'état de vos appareils pour qu'ils puissent être mis en service dans un autre réseau.
- Contrôlez vos appareils depuis d'autres applications et écosystèmes.
Au cours des prochaines étapes, vous utiliserez le SDK Home Mobile pour partager des appareils.
Étape 1 : Créez un lanceur d'activité GPS
Comme pour le lanceur d'activité de mise en service que nous avons créé lors de la mise en service sur un tissu de développement, nous avons créé un lanceur d'activité de partage d'appareil pour gérer IntentSender à partir de l'API CommissioningClient.
- Ouvrez
DeviceScreendans le dossierjava/com/google/homesampleapp/screens/device/. - Remplacez le commentaire
// CODELAB: shareDeviceLauncher definitionpar le code suivant pour enregistrer et gérer le résultat de l'activité.shareDevice():val shareDeviceLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.StartIntentSenderForResult() ) { result -> // Commission Device Step 5. // The Share Device activity in GPS (step 4) has completed. val resultCode = result.resultCode if (resultCode == Activity.RESULT_OK) { deviceViewModel.shareDeviceSucceeded() } else { deviceViewModel.shareDeviceFailed(resultCode) } }
Étape 2 : Déclenchez l'action de partage de l'appareil
Dans cette étape, l'utilisateur déclenche l'action "Partager l'appareil" en cliquant sur le bouton "Partager" sur l'écran de l'appareil. Un appel est ensuite effectué à deviceViewModel pour ouvrir une fenêtre d'association pour le partage d'appareils.
// Share Device button click.
val onShareDevice: () -> Unit = remember {
{
deviceViewModel.openPairingWindow(deviceUiModel!!.device.deviceId)
}
}
Une fois la fenêtre d'association ouverte, deviceViewModel communique cette information à l'UI. La communication entre le ViewModel et l'UI s'effectue via des objets StateFlow.
// Communicate to the UI that the pairing window is open. // UI can then launch the GPS activity for device sharing. _pairingWindowOpenForDeviceSharing.value = true
Lorsque DeviceScreen constate la modification de l'objet StateFlow, il effectue l'appel suivant :
shareDevice(activity!!.applicationContext, shareDeviceLauncher, deviceViewModel)
Étape 3 : Appeler l'API
Il est maintenant temps de lancer une tâche de partage d'appareil.
- Ouvrez
DeviceScreen.ktdans le dossierjava/com/google/homesampleapp/screens/device/. - Localisez la fonction
shareDevice(). Remplacez le commentaire// CODELAB: shareDeviceparShareDeviceRequest. LeDeviceDescriptorfournit des informations spécifiques sur l'appareil, telles que son ID de fournisseur, son ID de produit et son type d'appareil. Dans cet exemple, nous codons en dur les valeurs.val shareDeviceRequest = ShareDeviceRequest.builder() .setDeviceDescriptor(DeviceDescriptor.builder().build()) .setDeviceName("GHSAFM temp device name") - Définissez les paramètres CommissioningWindow.
.setCommissioningWindow( CommissioningWindow.builder() .setDiscriminator(Discriminator.forLongValue(DISCRIMINATOR)) .setPasscode(SETUP_PIN_CODE) .setWindowOpenMillis(SystemClock.elapsedRealtime()) .setDurationSeconds(OPEN_COMMISSIONING_WINDOW_DURATION_SECONDS.toLong()) .build()) .build() - Appelez
.getCommissioningClient(), mais cette fois-ci, utilisez l'API.shareDevice().Matter.getCommissioningClient(context) .shareDevice(shareDeviceRequest)
Le rappel de réussite de l'API commissioningClient.shareDevice() fournit l'IntentSender à utiliser pour lancer le partage de l'activité de l'appareil dans les services Google Play.
- Pour terminer notre fonction
shareDevice, ajoutez unaddOnSuccessListeneret unaddOnFailureListener. En cas de réussite,launchest appelé surshareDeviceLauncherpour lancer l'activité GPS pour le partage d'appareils..addOnSuccessListener { result -> Timber.d("ShareDevice: Success getting the IntentSender: result [${result}]") shareDeviceLauncher.launch(IntentSenderRequest.Builder(result).build()) } .addOnFailureListener { error -> Timber.e(error) deviceViewModel.showMsgDialog("Share device failed", error.toString()) }
Exécuter l'application
Pour partager votre appareil Matter avec d'autres écosystèmes, vous devez avoir installé une autre plate-forme sur votre appareil Android. Nous avons créé une autre instance de l'application exemple que vous pouvez utiliser comme commissaire cible.
Une fois le commissaire cible installé sur votre appareil Android, vérifiez que vous pouvez partager votre appareil Matter. L'application du commissaire cible est intitulée GHSAFM-TC.
Vos appareils peuvent désormais participer à trois tissus :
- Fabric Android local.
- Votre structure de développement (cette application).
- Ce troisième réseau avec lequel vous venez de partager l'appareil.
8. Étapes suivantes
Félicitations
Félicitations, vous avez terminé cet atelier de programmation et appris à mettre en service et à partager des appareils à l'aide du SDK Home Mobile.
Si vous rencontrez des problèmes avec l'application exemple, essayez de suivre les étapes pour valider votre environnement :
Si vous avez des questions sur l'utilisation de l'application exemple ou si vous découvrez un bug dans le code, vous pouvez envoyer des problèmes à l'outil de suivi des problèmes dans le dépôt GitHub :
Pour obtenir des conseils officiels de Google sur les questions techniques, utilisez le forum des développeurs pour la maison connectée :
Pour obtenir une assistance technique de la communauté, utilisez le tag google-smart-home sur Stack Overflow :