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:
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 SieContext.getApplicationContext()
oderActivity.getApplication()
aufrufen.val context = Context.getApplicationContext()
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).
Instanziieren Sie
HomeConfig
mit dem CoroutinenkontextDispatchers.IO
und 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 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.