使用任何 Android 適用的 Home API 前,您必須先在應用程式中初始化住家。在這個步驟中,您將為本機環境建立 Home
的單例執行個體。
一次只能啟用一個 Home
例項。
這是 Home API 的進入點,也涉及宣告您打算搭配 Device & Structure 和 Automation API 使用的特徵和裝置類型。如果您剛開始使用 Google Home 生態系統,不確定要註冊哪些特徵或裝置類型,我們已在本指南中建議一些最常見的項目。
建立住家執行個體
首先,請將下列套件匯入應用程式:
import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home
如要初始化 Home API,請按照下列步驟操作:
取得
Application
結構定義的參照。這個內容不依附於任何活動生命週期,只要應用程式保持運作,這個內容就會存在。您可以呼叫Context.getApplicationContext()
或Activity.getApplication()
取得。val context = Context.getApplicationContext()
建立
FactoryRegistry
執行個體,其中包含您要在應用程式中使用的所有特徵和裝置類型。在本指南中,我們建議使用一些常見的裝置類型 (燈具、插座、感應器、開關和溫度控制器裝置類型,以及自動化作業的在場狀態和 Google 助理特徵),以防您不確定需要哪些裝置。詳情請參閱「特徵和裝置類型註冊」。
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
的單例執行個體,方法是將其包裝在物件宣告中。
以範例應用程式為例,做法如下:
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()
方法呼叫傳回。