Inizializzare la casa su Android

Prima di utilizzare una delle API Home per Android, 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 ingresso per le API Home e comporta anche la dichiarazione delle caratteristiche e dei tipi di dispositivi che si intende utilizzare con le API Device & Structure e Automation. Se hai appena iniziato a utilizzare l'ecosistema Google Home e non sei sicuro di quali caratteristiche o tipi di dispositivi registrare, in questa guida ti suggeriamo alcuni dei più comuni.

Crea un'istanza 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 da alcun ciclo di vita dell'attività e rimarrà attivo finché sarà attiva la tua app. Puoi ottenerlo chiamando getApplicationContext() entro Activity o Service:

    val 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 tipi comuni (dispositivi di tipo Luce, Presa, Sensore, Interruttore e Termostato, tratti di presenza e dell'assistente per le automazioni), nel caso in cui non sapessi cosa ti serve. Per saperne di più, vedi 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))
    

    Sono necessarie istruzioni di importazione per ogni singola caratteristica e tipo di dispositivo registrati qui (Android Studio dovrebbe chiederti di aggiungerle).

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

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Infine, crea l'istanza singleton di Home, che è il punto di ingresso 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 una sola istanza singleton di Home, racchiudendola in una dichiarazione di oggetto.

Ad esempio, l'app di esempio lo fa in questo modo:

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

Registrazione di caratteristiche e tipi di dispositivi

La classe FactoryRegistry aiuta gli sviluppatori a ottimizzare le dimensioni binarie delle loro app consentendo loro di indicare esplicitamente quali caratteristiche e tipi di dispositivi vengono utilizzati dalla loro app.

Si noti che le autorizzazioni e il registro di fabbrica sono disaccoppiati. Pertanto, i tratti e i tipi non registrati disponibili per l'app tramite autorizzazioni ma non inclusi nel registro di fabbrica non sono accessibili tramite l'API di automazione né vengono restituiti nelle chiamate in blocco del metodo traits() o types().