Android용 Home API를 사용하기 전에 앱에서 홈을 초기화해야 합니다. 이 단계에서는 로컬 컨텍스트에 싱글톤 인스턴스인 Home
를 만듭니다.
한 번에 하나의 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에서 이를 추가하라는 메시지를 표시해야 함).
Dispatchers.IO
코루틴 컨텍스트와 레지스트리 인스턴스를 사용하여HomeConfig
를 인스턴스화합니다.val homeConfig = HomeConfig( coroutineContext = Dispatchers.IO, factoryRegistry = registry)
마지막으로 컨텍스트와
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
클래스를 사용하면 개발자가 앱에서 사용하는 특성과 기기 유형을 명시적으로 표시하여 앱 바이너리 크기를 최적화할 수 있습니다.
권한과 팩토리 레지스트리는 분리되어 있습니다. 따라서 권한을 사용하여 앱에서 사용할 수 있지만 팩토리 레지스트리에 포함되지 않은 등록되지 않은 특성과 유형은 자동화 API를 사용하여 액세스할 수 없으며 대량 traits()
또는 types()
메서드 호출에서 반환되지도 않습니다.