Zuhause auf Android-Geräten initialisieren

Bevor Sie die Home-APIs für Android verwenden können, müssen Sie das Zuhause in Ihrer App initialisieren. In diesem Schritt erstellen Sie eine Singleton-Instanz von Home für den lokalen Kontext.

Es sollte immer nur eine Instanz von Home aktiv sein.

Dies ist der Einstiegspunkt für die Home APIs. Außerdem müssen Sie angeben, welche Traits und Gerätetypen Sie mit den Device & Structure API und Automation API verwenden möchten. Wenn du gerade erst mit dem Google Home-Ökosystem beginnst und nicht sicher bist, welche Merkmale oder Gerätetypen du registrieren sollst, haben wir in diesem Leitfaden einige der häufigsten Vorschläge gemacht.

Home-Instanz erstellen

Importieren Sie zuerst diese Pakete in Ihre App:

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

So initialisieren Sie die Home APIs:

  1. Rufen Sie einen Verweis auf den Kontext Application ab. Dieser Kontext ist nicht vom Aktivitätslebenszyklus abhängig und ist so lange verfügbar, wie Ihre App ausgeführt wird. Sie können sie abrufen, indem Sie Context.getApplicationContext() oder Activity.getApplication() aufrufen.

    val context = Context.getApplicationContext()
    
  2. Erstelle eine FactoryRegistry-Instanz mit allen Merkmalen und Gerätetypen, die du in deiner App verwenden möchtest.

    In dieser Anleitung haben wir einige gängige Gerätetypen (Gerätetypen „Light“, „Plug“, „Sensor“, „Switch“ und „Thermostat“, Anwesenheits- und Assistant-Merkmale für Automatisierungen) vorgeschlagen, falls Sie sich nicht sicher sind, was Sie benötigen. Weitere Informationen finden Sie unter Registrierung von Attributen und Gerätetypen.

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

    Für jedes einzelne Merkmal und jeden hier registrierten Gerätetyp sind Importanweisungen erforderlich (Android Studio sollte Sie auffordern, diese hinzuzufügen).

  3. Instanziieren Sie HomeConfig mit dem Coroutinenkontext Dispatchers.IO und Ihrer Registry-Instanz.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Erstellen Sie schließlich die Singleton-Instanz von Home, dem Einstiegspunkt für die APIs, mit dem Kontext und dem HomeConfig.

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

Um Fehler bei ungültigen Sitzungen zu vermeiden, ist es wichtig, dass nur eine Singleton-Instanz von Home erstellt wird, indem sie in eine Objektdeklaration eingeschlossen wird.

In der Beispiel-App wird dies beispielsweise so gemacht:

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

Registrierung von Traits und Gerätetypen

Mit der Klasse FactoryRegistry können Entwickler die Größe des App-Binärprogramms optimieren, indem sie explizit angeben, welche Merkmale und Gerätetypen von ihrer App verwendet werden.

Berechtigungen und die Werksregistrierung sind voneinander entkoppelt. Daher sind nicht registrierte Merkmale und Typen, die für Ihre App über Berechtigungen verfügbar sind, aber nicht in der Werksregistrierung enthalten sind, über die Automation API nicht zugänglich und werden auch nicht in den Bulk-Methodenaufrufen traits() oder types() zurückgegeben.