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:
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, chameContext.getApplicationContext()
ouActivity.getApplication()
.val context = Context.getApplicationContext()
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).
Instância um
HomeConfig
usando o contexto de corrotinaDispatchers.IO
e a instância do registro.val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
Por fim, crie a instância única de
Home
, que é o ponto de entrada para as APIs, usando o contexto e oHomeConfig
.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.