在使用任何 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,请执行以下操作:
获取对
Application
上下文的引用。此上下文不依赖于任何 activity 生命周期,并且只要应用处于活跃状态,就会一直存在。您可以通过调用Context.getApplicationContext()
或Activity.getApplication()
来获取它。val context = Context.getApplicationContext()
创建一个
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 应提示您添加这些语句)。
使用
Dispatchers.IO
协程上下文和注册表实例实例化HomeConfig
。val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
最后,使用上下文和
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()
方法调用中返回。