Прежде чем использовать какой-либо Home API, вы должны инициализировать дом в своем приложении. На этом этапе вы создадите одноэлементный экземпляр Home
для локального контекста.
Одновременно должен быть активен только один экземпляр Home
.
Это точка входа в домашние API, а также включает объявление того, какие характеристики и типы устройств вы собираетесь использовать с API-интерфейсами устройств и структур и автоматизации. Если вы только начинаете работать с экосистемой Google Home и не знаете, какие характеристики или типы устройств регистрировать, в этом руководстве мы предложили некоторые из наиболее распространенных.
Создать домашний экземпляр
Для начала импортируйте эти пакеты в свое приложение:
import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home
Чтобы инициализировать Home API:
Получите ссылку на контекст
Application
. Этот контекст не зависит от какого-либо жизненного цикла активности и будет существовать до тех пор, пока живо ваше приложение. Вы можете получить его, вызвавContext.getApplicationContext()
илиActivity.getApplication()
.val context = Context.getApplicationContext()
Создайте экземпляр
FactoryRegistry
со всеми характеристиками и типами устройств, которые вы собираетесь использовать в своем приложении.В этом руководстве мы предложили некоторые распространенные устройства (типы устройств «Свет», «Вилка», «Датчик», «Выключатель» и «Термостат», функции присутствия и «Помощник» для автоматизации), на случай, если вы не уверены, что вам нужно. Дополнительные сведения см. в разделе Регистрация характеристик и типов устройств .
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()
.