初始化主畫面

使用任何 Google Home API 前,您必須在應用程式中初始化住家。在此步驟中,您將為本機內容建立 Home單例例項。

一次只能啟用一個 Home 例項。

這是 Home API 的進入點,也涉及宣告您打算與 Device & Structure 和 Automation 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,請按照下列步驟操作:

  1. 取得 Application 結構定義的參照。這個內容不會依賴任何活動生命週期,只要應用程式處於運作狀態,就會持續存在。您可以呼叫 Context.getApplicationContext()Activity.getApplication() 來取得。

    val context = Context.getApplicationContext()
    
  2. 建立 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 應會提示您新增這些陳述式)。

  3. 使用 Dispatchers.IO 協同程式背景和註冊執行個體,將 HomeConfig 例項化。

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. 最後,請使用結構定義和 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() 方法呼叫中傳回。