Inizializzare la casa

Prima di utilizzare una delle API Home, devi inizializzare la casa nella tua app. In questo passaggio, creerai un'istanza singleton di Home per il contesto locale.

Deve essere attiva una sola istanza di Home alla volta.

Questo è il punto di contatto per le API Home e prevede anche la dichiarazione dei tratti e dei tipi di dispositivi che intendi utilizzare con le API Device & Structure e Automation. Se stai appena iniziando a utilizzare l'ecosistema Google Home e non sai quali tratti o tipi di dispositivi registrare, in questa guida abbiamo suggerito alcuni dei più comuni.

Creare un'istanza di Home

Per iniziare, importa questi pacchetti nella tua app:

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

Per inizializzare le API Home:

  1. Ottieni un riferimento al contesto Application. Questo contesto non dipende dal ciclo di vita di alcuna attività e rimarrà attivo per tutto il ciclo di vita dell'app. Puoi richiederlo chiamando Context.getApplicationContext() o Activity.getApplication().

    val context = Context.getApplicationContext()
    
  2. Crea un'istanza FactoryRegistry con tutti i tratti e i tipi di dispositivi che intendi utilizzare nella tua app.

    Per questa guida, abbiamo suggerito alcuni dei più comuni (lampade, prese, sensori, interruttori e termostati, nonché attributi di presenza e dell'assistente per le automazioni), nel caso in cui tu non abbia la certezza di ciò che ti serve. Per scoprire di più, consulta Registrazione di tratti e tipi di dispositivi.

    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))
    

    Le istruzioni di importazione per ogni singolo tratto e tipo di dispositivo registrato qui sono obbligatorie (Android Studio dovrebbe chiederti di aggiungerle).

  3. Crea un'istanza di HomeConfig utilizzando il contenuto del contesto della coroutine Dispatchers.IO e l'istanza del registry.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Infine, crea l'istanza singleton di Home, che è il punto di accesso alle API, utilizzando il contesto e HomeConfig.

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

Per evitare errori con sessioni non valide, è importante che venga creata solo un'istanza singleton di Home, racchiudendola in una dichiarazione di oggetto.

Ad esempio, l'app di esempio lo fa nel seguente modo:

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

Registrazione di tratti e tipi di dispositivi

La classe FactoryRegistry aiuta gli sviluppatori a ottimizzare le dimensioni del file binario dell'app consentendo di indicare esplicitamente quali tratti e tipi di dispositivi vengono utilizzati dall'app.

Tieni presente che le autorizzazioni e il registry di fabbrica sono disaccoppiati. Pertanto, i tratti e i tipi non registrati disponibili per la tua app che utilizzano le autorizzazioni, ma non sono inclusi nel registry di fabbrica, non sono accessibili tramite l'API Automation né vengono restituiti nelle chiamate collettive dei metodi traits() o types().