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
コンテキストへの参照を取得します。このコンテキストはアクティビティのライフサイクルに依存せず、アプリが存続する限り存続します。Context.getApplicationContext()
またはActivity.getApplication()
を呼び出すことで取得できます。val context = 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()
メソッド呼び出しで返されることもありません。