Bevor Sie die Home-APIs für Android verwenden, müssen Sie die Startseite 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 zu den Home-APIs und beinhaltet auch die Angabe, welche Merkmale und Gerätetypen Sie mit den Device & Structure- und Automation-APIs 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:
Rufen Sie einen Verweis auf den Kontext
Applicationab. Dieser Kontext ist von keinem Aktivitätslebenszyklus abhängig und bleibt so lange bestehen, wie Ihre App aktiv ist. Sie können sie abrufen, indem SiegetApplicationContext()in einemActivityoderServiceaufrufen:val context = getApplicationContext()Erstelle eine
FactoryRegistry-Instanz mit allen Attributen 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 du dir nicht sicher bist, was du benötigst. 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 hier registrierte Merkmal und jeden Gerätetyp sind Importanweisungen erforderlich (Android Studio sollte Sie auffordern, diese hinzuzufügen).
Instanziieren Sie
HomeConfigmit dem CoroutinenkontextDispatchers.IOund Ihrer Registry-Instanz.val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)Erstellen Sie schließlich die Singleton-Instanz von
Home, dem Einstiegspunkt für die APIs, mit dem Kontext und demHomeConfig.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 umgesetzt:
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 Ihrer App über Berechtigungen zur Verfügung stehen, aber nicht in der Factory-Registry enthalten sind, weder über die Automation API zugänglich, noch werden sie bei den Bulk-Methodenaufrufen traits() oder types() zurückgegeben.