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:
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 SieContext.getApplicationContext()
oderActivity.getApplication()
aufrufen.val context = Context.getApplicationContext()
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.
Erstelle eine Instanz von
HomeConfig
mit demDispatchers.IO
-Koordinierungskontext und deiner Registry-Instanz.val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
Erstellen Sie abschließend die Singleton-Instanz von
Home
, die der Einstiegspunkt für die APIs ist. Verwenden Sie dazu den Kontext und dieHomeConfig
.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.