家を初期化する

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

一度に有効にできる Home のインスタンスは 1 つだけです。

これは Home API へのエントリ ポイントであり、Device & Structure API と 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 を初期化するには:

  1. Application コンテキストへの参照を取得します。このコンテキストはアクティビティのライフサイクルに依存せず、アプリが存続する限り存続します。Context.getApplicationContext() または Activity.getApplication() を呼び出すと取得できます。

    val context = 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 クラスを使用すると、アプリで使用される特徴とデバイスタイプを明示的に指定できるため、アプリのバイナリサイズを最適化できます。

権限とファクトリー レジストリは分離されています。したがって、権限を使用してアプリで使用できるが、ファクトリー レジストリに含まれていない未登録の特性と型には、Automation API を使用してアクセスできず、一括 traits() メソッド呼び出しまたは types() メソッド呼び出しで返されることはありません。