Initialiser la maison

Avant d'utiliser l'une des API Home, vous devez initialiser la maison dans votre application. À 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, qui implique également de déclarer les caractéristiques 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 quels traits ou types d'appareils enregistrer, nous vous suggérons dans ce guide certains des plus courants.

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 existe tant que votre application est active. Vous pouvez l'obtenir en appelant Context.getApplicationContext() ou Activity.getApplication().

    val context = 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 vous avons suggéré des caractéristiques courantes (types d'appareils Lumière, Prise, Capteur, Interrupteur et Thermostat, caractéristiques de présence et de l'Assistant pour les automatisations), au cas où vous ne sauriez pas ce dont vous avez besoin. Pour en savoir plus, consultez la section Enregistrement des caractéristiques 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))
    

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

  3. Instanciez un HomeConfig à l'aide du contexte de coroutine Dispatchers.IO et de 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, à l'aide du contexte et de HomeConfig.

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

Pour éviter les erreurs liées à des sessions non valides, il est important qu'une seule instance singleton de Home soit créée, 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 traits et les types d'appareils 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 de l'usine, sont inaccessibles à l'aide de l'API Automation. Ils ne sont pas non plus renvoyés dans les appels de méthode traits() ou types() groupés.