Zuhause initialisieren

Bevor Sie eine der Home APIs 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 in die Smart-Home-APIs. Außerdem müssen Sie angeben, welche Merkmale und Gerätetypen Sie mit den APIs „Device & Structure“ und „Automation“ verwenden möchten. Wenn Sie gerade erst mit dem Google Home-System beginnen und nicht sicher sind, welche Merkmale oder Gerätetypen Sie registrieren sollten, finden Sie in diesem Leitfaden einige der gängigsten.

Zuhause-Instanz erstellen

Importieren Sie zuerst die folgenden 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 eine Referenz auf den Application-Kontext ab. Dieser Kontext ist unabhängig vom Aktivitätszyklus und besteht so lange, wie Ihre App aktiv ist. Sie können sie abrufen, indem Sie Context.getApplicationContext() oder Activity.getApplication() aufrufen.

    val context = Context.getApplicationContext()
    
  2. Erstellen Sie eine FactoryRegistry-Instanz mit allen Merkmalen und Gerätetypen, die Sie in Ihrer App verwenden möchten.

    In diesem Leitfaden haben wir einige gängige Gerätetypen (Lampe, Steckdose, Sensor, Schalter und Thermostat) sowie Anwesenheits- und Assistant-Eigenschaften für Automatisierungen vorgeschlagen, falls Sie sich nicht sicher sind, was Sie benötigen. Weitere Informationen finden Sie unter Merkmale und Gerätetypen registrieren.

    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 jeden hier registrierten Merkmal- und Gerätetyp sind Importanweisungen erforderlich. Android Studio sollte Sie auffordern, diese hinzuzufügen.

  3. Erstelle eine Instanz von HomeConfig mit dem Dispatchers.IO-Koordinierungskontext und deiner Registry-Instanz.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Erstellen Sie abschließend die Singleton-Instanz von Home, die der Einstiegspunkt für die APIs ist. Verwenden Sie dazu den Kontext und die HomeConfig.

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

Um Fehler mit ungültigen Sitzungen zu vermeiden, muss nur eine Singleton-Instanz von Home erstellt werden. Um dies zu erreichen, muss Home in eine Objektdeklaration eingeschlossen werden.

In der Beispielanwendung geschieht dies so:

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

Registrierung von Merkmalen und Gerätetypen

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

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