Antes de usar cualquiera de las APIs de Home, debes inicializar la casa en tu app. En
este paso, crearás una instancia de singleton de
Home
para el contexto local.
Solo debe haber una instancia de Home
activa a la vez.
Este es el punto de entrada a las APIs de Home y también implica declarar qué atributos y tipos de dispositivos deseas usar con las APIs de Device & Structure y Automation. Si es la primera vez que usas el ecosistema de Google Home y no estás seguro de qué atributos o tipos de dispositivos registrar, te sugerimos algunos de los más comunes en esta guía.
Crea una instancia de Home
Para comenzar, importa estos paquetes en tu app:
import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home
Para inicializar las APIs de Home, haz lo siguiente:
Obtén una referencia al contexto de
Application
. Este contexto no depende de ningún ciclo de vida de la actividad y permanecerá activo mientras la app esté activa. Puedes obtenerlo llamando aContext.getApplicationContext()
oActivity.getApplication()
.val context = Context.getApplicationContext()
Crea una instancia de
FactoryRegistry
con todos los atributos y tipos de dispositivos que deseas usar en tu app.En esta guía, sugerimos algunos comunes (tipos de dispositivos de luz, enchufe, sensor, interruptor y termostato, y atributos de presencia y Asistente para automatizaciones), en caso de que no sepas qué necesitas. Para obtener más información, consulta Registro de atributos y tipos de dispositivos.
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))
Se requieren instrucciones de importación para cada tipo de dispositivo y atributo individuales registrados aquí (Android Studio debería solicitarte que los agregues).
Crea una instancia de
HomeConfig
con el contexto de corrutinaDispatchers.IO
y tu instancia de registro.val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
Por último, crea la instancia de singleton de
Home
, que es el punto de entrada a las APIs, con el contexto yHomeConfig
.val homeManager: HomeClient = Home.getClient(context, homeConfig)
Para evitar errores con sesiones no válidas, es importante que solo se cree una instancia de singleton de Home
, que se une en una declaración de objeto.
Por ejemplo, la app de ejemplo lo hace de esta manera:
internal object HomeClientModule {
@Provides
@Singleton
fun provideHomeClient(@ApplicationContext context: Context): HomeClient {
return Home.getClient(
context,
HomeConfig(
coroutineContext = IODispatcherModule.provideIoDispatcher(),
factoryRegistry = registry,
),
)
}
}
Registro de tipos de dispositivos y atributos
La clase FactoryRegistry
ayuda a los desarrolladores a optimizar el tamaño binario de su app, ya que les permite indicar de forma explícita qué atributos y tipos de dispositivos usa su app.
Ten en cuenta que los permisos y el registro de fábrica están separados. Por lo tanto, no se puede acceder a los atributos y tipos no registrados que están disponibles para tu app con permisos, pero que no se incluyen en el registro de fábrica con la API de Automation ni se muestran en las llamadas masivas a los métodos traits()
o types()
.