Antes de usar cualquiera de las API de Home para Android, debes inicializar la pantalla de inicio en tu aplicación. En este paso, crearás una instancia singleton de Home para el contexto local.
Solo una instancia de Home debe estar activa a la vez.
Este es el punto de entrada a las APIs de Home y también implica declarar qué rasgos y tipos de dispositivos planeas usar con las APIs de Device & Structure y Automation. Si recién comienzas a usar el ecosistema de Google Home y no sabes qué rasgos 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 a tu app:
import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home
Para inicializar las API de inicio:
Obtén una referencia al contexto de
Application. Este contexto no depende de ningún ciclo de vida de la actividad y existirá mientras su aplicación esté activa. Puedes obtenerlo llamando agetApplicationContext()dentro de unActivityoService:val context = getApplicationContext()Crea una instancia
FactoryRegistrycon todos los rasgos y tipos de dispositivos que pretendes usar en tu aplicación.Para esta guía, hemos sugerido algunos de los más comunes (tipos de dispositivos: luz, enchufe, sensor, interruptor y termostato; características de presencia y asistente para automatizaciones), en caso de que no esté seguro de lo que necesita. Para obtener más información, consulta Registro de rasgos 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 rasgo y tipo de dispositivo individuales registrados aquí (Android Studio debería solicitarte que los agregues).
Instancie un
HomeConfigusando el contexto de corrutinaDispatchers.IOy su instancia de registro.val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)Finalmente, cree la instancia singleton de
Home, que es el punto de entrada a las API, utilizando el contexto y elHomeConfig.val homeManager: HomeClient = Home.getClient(context, homeConfig)
Para evitar errores con sesiones no válidas, es importante que solo se cree una instancia singleton de Home, envolviéndola en una declaración de objeto.
Por ejemplo, la app de ejemplo lo hace de la siguiente manera:
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 y tipos de dispositivos
La clase FactoryRegistry ayuda a los desarrolladores a optimizar el tamaño del binario de su app, ya que les permite indicar explícitamente qué rasgos y tipos de dispositivos usa su app.
Tenga en cuenta que los permisos y el registro de fábrica están desacoplados. Por lo tanto, no se puede acceder a los rasgos y tipos no registrados que están disponibles para tu app a través de permisos, pero que no se incluyen en el registro de fábrica, con la API de Automation, ni se devuelven en las llamadas masivas a los métodos traits() o types().