Инициализируйте дом

Прежде чем использовать какой-либо 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:

  1. Получите ссылку на контекст Application . Этот контекст не зависит от какого-либо жизненного цикла активности и будет существовать до тех пор, пока живо ваше приложение. Вы можете получить его, вызвав Context.getApplicationContext() или Activity.getApplication() .

    val context = Context.getApplicationContext()
    
  2. Создайте экземпляр 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 должна предложить вам добавить их).

  3. Создайте экземпляр HomeConfig , используя контекст сопрограммы Dispatchers.IO и экземпляр вашего реестра.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Наконец, создайте одноэлементный экземпляр 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() .