Перед использованием любого из API Home для Android необходимо инициализировать дом в вашем приложении. На этом этапе вы создадите синглтон- экземпляр Home
для локального контекста.
Одновременно должен быть активен только один экземпляр Home
.
Это точка входа в API Home, а также включает в себя объявление того, какие черты и типы устройств вы собираетесь использовать с API Device & Structure и Automation. Если вы только начинаете работу с экосистемой Google Home и не уверены, какие черты или типы устройств регистрировать, мы предложили некоторые из наиболее распространенных здесь, в этом руководстве.
Создать экземпляр Home
Для начала импортируйте эти пакеты в свое приложение:
import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home
Для инициализации API Home:
Получите ссылку на контекст
Application
. Этот контекст не зависит от жизненного цикла какой-либо активности и будет существовать до тех пор, пока существует ваше приложение. Вы можете получить его, вызвавContext.getApplicationContext()
илиActivity.getApplication()
.val context = Context.getApplicationContext()
Создайте экземпляр
FactoryRegistry
со всеми характеристиками и типами устройств, которые вы собираетесь использовать в своем приложении.Для этого руководства мы предложили несколько распространенных типов устройств (типы устройств Light, Plug, Sensor, Switch и Thermostat, признаки присутствия и Assistant для автоматизации), на случай, если вы не уверены, что вам нужно. Чтобы узнать больше, см. раздел Регистрация признаков и типов устройств .
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))
Необходимы операторы импорта для каждого отдельного признака и типа устройства, зарегистрированного здесь ( Android Studio должна предложить вам добавить их).
Создайте экземпляр
HomeConfig
, используя контекст сопрограммыDispatchers.IO
и экземпляр вашего реестра.val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
Наконец, создайте единичный экземпляр
Home
, который является точкой входа в API, используя контекст иHomeConfig
.val homeManager: HomeClient = Home.getClient(context, homeConfig)
Чтобы избежать ошибок с недействительными сеансами, важно создавать только один экземпляр Home
, заключая его в объявление объекта .
Например, пример приложения делает это следующим образом:
internal object HomeClientModule {
@Provides
@Singleton
fun provideHomeClient(@ApplicationContext context: Context): HomeClient {
return Home.getClient(
context,
HomeConfig(
coroutineContext = IODispatcherModule.provideIoDispatcher(),
factoryRegistry = registry,
),
)
}
}
Регистрация характеристик и типов устройств
Класс FactoryRegistry
помогает разработчикам оптимизировать размер двоичного файла своего приложения, позволяя им явно указывать, какие характеристики и типы устройств используются их приложением.
Обратите внимание, что разрешения и реестр фабрики не связаны. Поэтому незарегистрированные черты и типы, доступные вашему приложению с использованием разрешений, но не включенные в реестр фабрики, недоступны с помощью API автоматизации и не возвращаются в массовых вызовах методов traits()
или types()
.