Zanim użyjesz dowolnego interfejsu API Home na Androida, musisz zainicjować Home w swojej aplikacji. W tym kroku utwórz instancję singletona interfejsu Home
dla kontekstu lokalnego.
W danym momencie aktywne może być tylko jedno wystąpienie Home
.
Jest to punkt wejścia do interfejsów API Home. Obejmuje też deklarowanie cech i typów urządzeń, których chcesz używać w ramach interfejsów Device & Structure oraz interfejsów API automatyzacji. Jeśli dopiero zaczynasz korzystać z ekosystemu Google Home i nie wiesz, jakie cechy lub typy urządzeń zarejestrować, w tym przewodniku znajdziesz kilka najpopularniejszych.
Tworzenie instancji Home
Na początek zaimportuj do aplikacji te pakiety:
import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home
Aby zainicjować interfejsy API Home:
Pobierz odwołanie do kontekstu
Application
. Ten kontekst nie zależy od cyklu aktywności i będzie aktywny tak długo, jak aplikacja będzie działać. Możesz go uzyskać, dzwoniąc pod numerContext.getApplicationContext()
lubActivity.getApplication()
.val context = Context.getApplicationContext()
Utwórz instancję
FactoryRegistry
ze wszystkimi cechami i typami urządzeń, których chcesz użyć w aplikacji.W tym przewodniku sugerujemy kilka typowych (urządzenia typu Light, Plug, Sensor, Switch i Thermostat, cechy obecności i Asystenta do automatyzacji), jeśli nie masz pewności, czego potrzebujesz. Więcej informacji znajdziesz w artykule Rejestrowanie cech i typów urządzeń.
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))
Wymagany jest import instrukcji dla każdego zarejestrowanego tutaj atrybutu i typu urządzenia (Android Studio powinien wyświetlić odpowiedni komunikat).
Utwórz instancję
HomeConfig
za pomocą kontekstuDispatchers.IO
coroutine i instancji rejestru.val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
Na koniec utwórz pojedynczy egzemplarz interfejsu
Home
, który jest punktem wejścia do interfejsów API. Użyj do tego kontekstu i interfejsuHomeConfig
.val homeManager: HomeClient = Home.getClient(context, homeConfig)
Aby uniknąć błędów związanych z nieprawidłowymi sesjami, należy utworzyć tylko instancję pojedynczą obiektu Home
, otaczając ją deklaracją obiektu.
Na przykład przykładowa aplikacja robi to w ten sposób:
internal object HomeClientModule {
@Provides
@Singleton
fun provideHomeClient(@ApplicationContext context: Context): HomeClient {
return Home.getClient(
context,
HomeConfig(
coroutineContext = IODispatcherModule.provideIoDispatcher(),
factoryRegistry = registry,
),
)
}
}
Rejestrowanie cech i typów urządzeń
Klasa FactoryRegistry
pomaga deweloperom optymalizować rozmiar aplikacji binarnej, umożliwiając im wyraźne wskazanie, które cechy i typy urządzeń są używane przez aplikację.
Uprawnienia i rejestr fabryczny są rozdzielone. Dlatego niezarejestrowane cechy i typy, które są dostępne dla aplikacji za pomocą uprawnień, ale nie są uwzględnione w rejestrze fabrycznym, są niedostępne za pomocą interfejsu Automation API. Nie są też zwracane w ramach zbiorczych wywołań metod traits()
ani types()
.