Inicializar a casa

Antes de usar qualquer uma das APIs do Google Home, é necessário inicializar a casa no seu app. Nesta etapa, você vai criar uma instância única de Home para o contexto local.

Apenas uma instância de Home pode estar ativa por vez.

Esse é o ponto de entrada para as APIs Home e também envolve declarar quais características e tipos de dispositivo você pretende usar com as APIs Device & Structure e Automation. Se você está começando a usar o ecossistema do Google Home e não sabe quais características ou tipos de dispositivo registrar, sugerimos algumas das mais comuns neste guia.

Criar uma instância do Google Home

Para começar, importe estes pacotes para o app:

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

Para inicializar as APIs Home:

  1. Receba uma referência ao contexto Application. Esse contexto não depende de nenhum ciclo de vida da atividade e permanece ativo enquanto o app estiver ativo. Para conseguir, chame Context.getApplicationContext() ou Activity.getApplication().

    val context = Context.getApplicationContext()
    
  2. Crie uma instância de FactoryRegistry com todos os tipos de traços e dispositivos que você pretende usar no app.

    Neste guia, sugerimos alguns tipos comuns de dispositivos (luz, plugue, sensor, interruptor e termostato), presença e características do Google Assistente para automações, caso você não tenha certeza do que precisa. Para saber mais, consulte Registro de atributos e tipos de dispositivo.

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

    As instruções de importação para cada tipo de dispositivo e característica registrados aqui são obrigatórias (Android Studio vai solicitar que você as adicione).

  3. Instância um HomeConfig usando o contexto de corrotina Dispatchers.IO e a instância do registro.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Por fim, crie a instância única de Home, que é o ponto de entrada para as APIs, usando o contexto e o HomeConfig.

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

Para evitar erros com sessões inválidas, é importante que apenas uma instância única de Home seja criada, envolvendo-a em uma declaração de objeto.

Por exemplo, o app de exemplo faz isso assim:

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

Registro de características e tipos de dispositivos

A classe FactoryRegistry ajuda os desenvolvedores a otimizar o tamanho binário do app, permitindo que indiquem explicitamente quais tipos de traços e dispositivos são usados pelo app.

As permissões e o registro de fábrica são separados. Portanto, os tipos e os traços não registrados que estão disponíveis para o app usando permissões, mas não incluídos no registro de fábrica, não podem ser acessados usando a API Automation nem são retornados nas chamadas de método traits() ou types() em massa.