Initialiser la maison sur Android

Avant d'utiliser l'une des API Home pour Android, vous devez initialiser la maison dans votre application. Dans cette étape, vous allez créer une instance singleton de Home pour le contexte local.

Une seule instance de Home doit être active à la fois.

Il s'agit du point d'entrée des API Home. Il implique également de déclarer les traits et les types d'appareils que vous prévoyez d'utiliser avec les API Device & Structure et Automation. Si vous débutez avec l'écosystème Google Home et que vous ne savez pas quelles caractéristiques ou quels types d'appareils enregistrer, nous avons suggéré quelques-uns des plus courants dans ce guide.

Créer une instance Home

Pour commencer, importez ces packages dans votre application :

import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home

Pour initialiser les API Home :

  1. Obtenez une référence au contexte Application. Ce contexte ne dépend d'aucun cycle de vie d'activité et restera actif tant que votre application le sera. Vous pouvez l'obtenir en appelant getApplicationContext() dans un Activity ou un Service :

    val context = getApplicationContext()
    
  2. Créez une instance FactoryRegistry avec tous les traits et types d'appareils que vous prévoyez d'utiliser dans votre application.

    Pour ce guide, nous avons suggéré quelques éléments courants (types d'appareils : lumière, prise, capteur, interrupteur et thermostat, présence et caractéristiques d'assistant pour les automatisations), au cas où vous ne sauriez pas exactement ce dont vous avez besoin. Pour en savoir plus, consultez Enregistrement des traits et des types d'appareils.

    val registry = FactoryRegistry(
      traits = listOf(
                AirQuality,
                AreaAttendanceState,
                AreaPresenceState,
                AssistantBroadcast,
                AssistantFulfillment,
                BooleanState,
                ColorControl,
                ExtendedColorControl,
                FlowMeasurement,
                IlluminanceMeasurement,
                LevelControl,
                Notification,
                OccupancySensing,
                OnOff,
                RelativeHumidityMeasurement,
                Switch,
                TemperatureMeasurement,
                Thermostat),
      types = listOf(
                AirQualitySensorDevice,
                ColorDimmerSwitchDevice,
                ColorTemperatureLightDevice,
                ContactSensorDevice,
                DimmableLightDevice,
                DimmablePlugInUnitDevice,
                DimmerSwitchDevice,
                ExtendedColorLightDevice,
                FlowSensorDevice,
                GenericSwitchDevice,
                HumiditySensorDevice,
                LightSensorDevice,
                OccupancySensorDevice,
                OnOffLightDevice,
                OnOffLightSwitchDevice,
                OnOffPluginUnitDevice,
                OnOffSensorDevice,
                SpeakerDevice,
                TemperatureSensorDevice,
                ThermostatDevice))
    

    Les instructions d'importation pour chaque trait et type d'appareil enregistrés ici sont obligatoires (Android Studio devrait vous inviter à les ajouter).

  3. Instanciez un HomeConfig en utilisant le contexte de coroutine Dispatchers.IO et votre instance de registre.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Enfin, créez l'instance singleton de Home, qui est le point d'entrée des API, en utilisant le contexte et le HomeConfig.

    val homeManager: HomeClient = Home.getClient(context, homeConfig)
    

Pour éviter les erreurs liées à des sessions non valides, il est important de ne créer qu'une instance singleton de Home en l'encapsulant dans une déclaration d'objet.

Par exemple, l'application exemple procède comme suit :

internal object HomeClientModule {
  @Provides
  @Singleton
  fun provideHomeClient(@ApplicationContext context: Context): HomeClient {
    return Home.getClient(
      context,
      HomeConfig(
        coroutineContext = IODispatcherModule.provideIoDispatcher(),
        factoryRegistry = registry,
      ),
    )
  }
}

Enregistrement des caractéristiques et des types d'appareils

La classe FactoryRegistry aide les développeurs à optimiser la taille binaire de leur application en leur permettant d'indiquer explicitement les caractéristiques et les types de périphériques utilisés par leur application.

Notez que les autorisations et le registre d'usine sont dissociés. Par conséquent, les traits et types non enregistrés qui sont disponibles pour votre application à l'aide d'autorisations, mais qui ne sont pas inclus dans le registre d'usine, sont inaccessibles à l'aide de l'API Automation. Ils ne sont pas non plus renvoyés dans les appels de méthode groupés traits() ou types().