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 を初期化するには:
- Applicationコンテキストへの参照を取得します。このコンテキストはアクティビティのライフサイクルに依存せず、アプリが存続する限り存続します。- Activityまたは- Service内で- getApplicationContext()を呼び出すことで取得できます。- val context = getApplicationContext()
- アプリで使用する予定のすべてのトレイトとデバイスタイプを含む - 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 で追加するよう求められます)。 
- Dispatchers.IOコルーチン コンテキストとレジストリ インスタンスを使用して- HomeConfigをインスタンス化します。- val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
- 最後に、コンテキストと - 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() メソッド呼び出しで返されることもありません。