Android で家を初期化する

Android 用 Home API を使用する前に、アプリでホームを初期化する必要があります。このステップでは、ローカル コンテキストの Homeシングルトン インスタンスを作成します。

Home のインスタンスは一度に 1 つだけアクティブにする必要があります。

これは Home API のエントリ ポイントであり、Device & Structure API と 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 コンテキストへの参照を取得します。このコンテキストはアクティビティのライフサイクルに依存せず、アプリが動作している限り存続します。Activity または Service 内で getApplicationContext() を呼び出すことで取得できます。

    val context = getApplicationContext()
    
  2. アプリで使用するすべてのトレイトとデバイスタイプを含む FactoryRegistry インスタンスを作成します。

    このガイドでは、必要なものがわからない場合に備えて、一般的なもの(照明、電源、センサー、スイッチ、サーモスタットのデバイスタイプ、自動化のプレゼンスとアシスタントのトレイト)をいくつか提案しています。詳細については、特性とデバイスタイプの登録をご覧ください。

    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 を使用して、API のエントリ ポイントである Homeシングルトン インスタンスを作成します。

    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このクラスは、開発者がアプリで使用する特性とデバイス タイプを明示的に示すことができるため、アプリのバイナリ サイズを最適化するのに役立ちます。

権限とファクトリー レジストリは分離されています。したがって、権限を使用してアプリで利用できるがファクトリーレジストリに含まれていない未登録の特性と型は、自動化 API大量に返却されることもないtraits()またはtypes()メソッド呼び出し。