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このクラスは、開発者がアプリで使用する特性とデバイス タイプを明示的に示すことができるため、アプリのバイナリ サイズを最適化するのに役立ちます。
権限とファクトリー レジストリは分離されています。したがって、権限を使用してアプリで利用できるがファクトリーレジストリに含まれていない未登録の特性と型は、自動化 API大量に返却されることもないtraits()またはtypes()メソッド呼び出し。