在使用任何适用于 Android 的 Home API 之前,您必须在应用中初始化 Home。在此步骤中,您将为本地上下文创建 Home
的 单例实例。
一次只能有一个 Home
实例处于活动状态。
这是 Home API 的入口点,还涉及声明您打算将哪些特征和设备类型与设备和结构 API 以及自动化 API 搭配使用。如果您刚开始使用 Google Home 生态系统,并且不确定要注册哪些特征或设备类型,我们已在本指南中建议了一些最常见的特征或设备类型。
创建 Home 实例
首先,将以下软件包导入到您的应用中:
import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home
如需初始化 Home API,请执行以下操作:
获取对
Application
context 的引用。此上下文不依赖于任何 activity 生命周期,只要应用处于有效状态,它就会一直存在。您可以通过调用Context.getApplicationContext()
或Activity.getApplication()
来获取该值。val context = Context.getApplicationContext()
创建一个包含您打算在应用中使用的所有特征和设备类型的
FactoryRegistry
实例。在本指南中,我们建议了一些常见的设备类型(灯、插座、传感器、开关和温控器设备类型,用于自动化的 presence 和 Assistant 特征),以防您不确定自己需要什么。如需了解详情,请参阅注册特征和设备类型。
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))
必须添加此处注册的每个单独特征和设备类型的 import 语句(Android Studio 应该会提示您添加这些语句)。
使用
Dispatchers.IO
协程上下文和您的注册表实例实例化HomeConfig
。val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
最后,使用上下文和
HomeConfig
创建Home
的 singleton 实例,该实例是 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
类可让开发者明确指明其应用使用的特征和设备类型,从而帮助他们优化应用二进制文件大小。
请注意,权限和出厂注册表是分离的。因此,使用权限可供应用使用但未包含在工厂注册表中的未注册特征和类型无法通过 Automation API 访问,也不会在批量 traits()
或 types()
方法调用中返回。