홈 초기화

Home API를 사용하기 전에 앱에서 홈을 초기화해야 합니다. 이 단계에서는 로컬 컨텍스트에 Home싱글톤 인스턴스를 만듭니다.

Home의 인스턴스는 한 번에 하나만 활성화되어야 합니다.

이는 Home API의 진입점이며 Device & Structure 및 Automation API와 함께 사용할 트레잇 및 기기 유형을 선언하는 것도 포함됩니다. Google Home 생태계를 처음 시작하고 등록할 트레잇 또는 기기 유형을 잘 모르겠다면 이 가이드에서 가장 일반적인 몇 가지를 참고하세요.

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. Dispatchers.IO 코루틴 컨텍스트와 레지스트리 인스턴스를 사용하여 HomeConfig를 인스턴스화합니다.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. 마지막으로 컨텍스트와 HomeConfig를 사용하여 API의 진입점인 Home싱글톤 인스턴스를 만듭니다.

    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 클래스는 개발자가 앱에서 사용하는 트레잇과 기기 유형을 명시적으로 표시하여 앱 바이너리 크기를 최적화하는 데 도움이 됩니다.

권한과 팩토리 레지스트리는 분리됩니다. 따라서 권한을 사용하여 앱에서 사용할 수 있지만 팩토리 레지스트리에 포함되지 않은 등록되지 않은 트레잇과 유형은 Automation API를 사용하여 액세스할 수 없으며 일괄 traits() 또는 types() 메서드 호출에서 반환되지도 않습니다.