在 Android 上初始化住宅

在使用适用于 Android 的任何 Home API 之前,您必须在应用中初始化住宅。在此步骤中,您将为本地上下文创建 Home单例实例。

一次只能有一个 Home 实例处于活动状态。

这是 Home API 的入口点,还涉及声明您打算将哪些 trait 和设备类型与设备和结构 API 和自动化 API 搭配使用。如果您刚刚开始接触 Google Home 生态系统,不确定要注册哪些 trait 或设备类型,请参阅本指南,我们在其中列出了一些最常见的 trait 和设备类型。

创建 Home 实例

首先,将以下软件包导入您的应用:

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

如需初始化 Home API,请执行以下操作:

  1. 获取对 Application 上下文的引用。此上下文不依赖于任何 activity 生命周期,并且只要应用处于活跃状态,它就会保持有效。您可以通过调用 Context.getApplicationContext()Activity.getApplication() 来获取该 ID。

    val context = Context.getApplicationContext()
    
  2. 创建一个 FactoryRegistry 实例,其中包含您打算在应用中使用的所有 trait 和设备类型。

    在本指南中,我们建议了一些常见的 trait(灯、插头、传感器、开关和温控器设备类型,以及适用于自动化操作的在家/外出和 Google 助理 trait),以防您不确定自己需要什么。如需了解详情,请参阅特征和设备类型的注册

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

    必须为此处注册的每个个别 trait 和设备类型添加导入语句(Android Studio 应提示您添加这些语句)。

  3. 使用 Dispatchers.IO 协程上下文和注册表实例实例化 HomeConfig

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. 最后,使用上下文和 HomeConfig 创建 Home单例实例,该实例是 API 的入口点。

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

为避免出现无效会话错误,请务必通过将 Home 封装在对象声明中,仅创建 Home单例实例

例如,示例应用会这样做:

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

注册特征和设备类型

FactoryRegistry 类可让开发者明确指明应用使用的 trait 和设备类型,从而帮助他们优化应用二进制文件大小。

请注意,权限和工厂注册表已解耦。因此,对于使用权限但未包含在工厂注册表中的未注册 trait 和类型,您无法使用 Automation API 访问它们,它们也不会在批量 traits()types() 方法调用中返回。