เริ่มต้นใช้งานบ้าน

คุณต้องเริ่มต้นใช้งานบ้านในแอปก่อนจึงจะใช้ Home API ได้ ในขั้นตอนนี้ คุณจะต้องสร้างอินสแตนซ์ Singleton ของ Home สำหรับบริบทในเครื่อง

Home ควรมีการใช้งานเพียงอินสแตนซ์เดียวในแต่ละครั้ง

นี่เป็นจุดแรกเข้าของ Home API และเกี่ยวข้องกับการประกาศลักษณะและประเภทอุปกรณ์ที่คุณต้องการใช้กับ API ของอุปกรณ์และโครงสร้าง รวมถึง 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 ที่มีลักษณะและประเภทอุปกรณ์ทั้งหมดที่คุณต้องการใช้ในแอป

    ในคู่มือนี้ เราได้แนะนำอุปกรณ์ทั่วไปบางรายการ (ประเภทอุปกรณ์หลอดไฟ ปลั๊ก เซนเซอร์ สวิตช์ และตัวควบคุมอุณหภูมิ ลักษณะการมีอยู่และ 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 ควรแจ้งให้คุณเพิ่มคำสั่งเหล่านี้)

  3. สร้างอินสแตนซ์ HomeConfig ใช้บริบท Dispatchers.IO โคโริวทีนและอินสแตนซ์รีจิสทรี

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. สุดท้าย ให้สร้างอินสแตนซ์ singleton ของ 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 ช่วยให้นักพัฒนาแอปเพิ่มประสิทธิภาพขนาดไบนารีของแอปได้โดยอนุญาตให้ระบุลักษณะและประเภทอุปกรณ์ที่แอปใช้อย่างชัดเจน

โปรดทราบว่าสิทธิ์และรีจิสทรีของโรงงานจะแยกกัน ดังนั้น คุณจึงไม่สามารถเข้าถึงลักษณะและประเภทที่ยังไม่ได้ลงทะเบียนซึ่งพร้อมใช้งานสำหรับแอปโดยใช้สิทธิ์แต่ไม่ได้รวมอยู่ในรีจิสทรีของโรงงานโดยใช้ Automation API และระบบจะไม่แสดงลักษณะและประเภทดังกล่าวในการเรียกใช้เมธอด traits() หรือ types() แบบเป็นกลุ่ม