初始化住宅

在使用任何 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() 来获取它。

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

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

    必须为此处注册的每个单独的特征和设备类型添加导入语句(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,
      ),
    )
  }
}

注册 trait 和设备类型

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

请注意,权限和工厂注册表是分离的。因此,使用权限但未包含在工厂注册表中的未注册 trait 和类型无法通过 Automation API 访问,也不会在批量 traits()types() 方法调用中返回。