Inicjowanie domu na urządzeniu z Androidem

Zanim użyjesz dowolnego interfejsu API Home na Androida, musisz zainicjować Home w swojej aplikacji. W tym kroku utwórz instancję singletona interfejsu Home dla kontekstu lokalnego.

W danym momencie aktywne może być tylko jedno wystąpienie Home.

Jest to punkt wejścia do interfejsów API Home. Obejmuje też deklarowanie cech i typów urządzeń, których chcesz używać w ramach interfejsów Device & Structure oraz interfejsów API automatyzacji. Jeśli dopiero zaczynasz korzystać z ekosystemu Google Home i nie wiesz, jakie cechy lub typy urządzeń zarejestrować, w tym przewodniku znajdziesz kilka najpopularniejszych.

Tworzenie instancji Home

Na początek zaimportuj do aplikacji te pakiety:

import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home

Aby zainicjować interfejsy API Home:

  1. Pobierz odwołanie do kontekstu Application. Ten kontekst nie zależy od cyklu aktywności i będzie aktywny tak długo, jak aplikacja będzie działać. Możesz go uzyskać, dzwoniąc pod numer Context.getApplicationContext() lub Activity.getApplication().

    val context = Context.getApplicationContext()
    
  2. Utwórz instancję FactoryRegistry ze wszystkimi cechami i typami urządzeń, których chcesz użyć w aplikacji.

    W tym przewodniku sugerujemy kilka typowych (urządzenia typu Light, Plug, Sensor, Switch i Thermostat, cechy obecności i Asystenta do automatyzacji), jeśli nie masz pewności, czego potrzebujesz. Więcej informacji znajdziesz w artykule Rejestrowanie cech i typów urządzeń.

    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))
    

    Wymagany jest import instrukcji dla każdego zarejestrowanego tutaj atrybutu i typu urządzenia (Android Studio powinien wyświetlić odpowiedni komunikat).

  3. Utwórz instancję HomeConfig za pomocą kontekstu Dispatchers.IO coroutine i instancji rejestru.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Na koniec utwórz pojedynczy egzemplarz interfejsu Home, który jest punktem wejścia do interfejsów API. Użyj do tego kontekstu i interfejsu HomeConfig.

    val homeManager: HomeClient = Home.getClient(context, homeConfig)
    

Aby uniknąć błędów związanych z nieprawidłowymi sesjami, należy utworzyć tylko instancję pojedynczą obiektu Home, otaczając ją deklaracją obiektu.

Na przykład przykładowa aplikacja robi to w ten sposób:

internal object HomeClientModule {
  @Provides
  @Singleton
  fun provideHomeClient(@ApplicationContext context: Context): HomeClient {
    return Home.getClient(
      context,
      HomeConfig(
        coroutineContext = IODispatcherModule.provideIoDispatcher(),
        factoryRegistry = registry,
      ),
    )
  }
}

Rejestrowanie cech i typów urządzeń

Klasa FactoryRegistry pomaga deweloperom optymalizować rozmiar aplikacji binarnej, umożliwiając im wyraźne wskazanie, które cechy i typy urządzeń są używane przez aplikację.

Uprawnienia i rejestr fabryczny są rozdzielone. Dlatego niezarejestrowane cechy i typy, które są dostępne dla aplikacji za pomocą uprawnień, ale nie są uwzględnione w rejestrze fabrycznym, są niedostępne za pomocą interfejsu Automation API. Nie są też zwracane w ramach zbiorczych wywołań metod traits() ani types().