Melakukan inisialisasi rumah di Android

Sebelum menggunakan Home API untuk Android, Anda harus melakukan inisialisasi rumah di aplikasi. Pada langkah ini, Anda akan membuat instance singleton Home untuk konteks lokal.

Hanya satu instance Home yang boleh aktif dalam satu waktu.

Ini adalah titik entri ke Home API dan juga melibatkan deklarasi karakteristik dan jenis perangkat yang ingin Anda gunakan dengan Device & Structure dan Automation API. Jika Anda baru memulai ekosistem Google Home dan tidak yakin jenis perangkat atau karakteristik apa yang harus didaftarkan, kami telah menyarankan beberapa yang paling umum di sini dalam panduan ini.

Membuat instance Home

Untuk memulai, impor paket ini ke aplikasi Anda:

import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home

Untuk melakukan inisialisasi Home API:

  1. Dapatkan referensi ke konteks Application. Konteks ini tidak bergantung pada siklus proses aktivitas apa pun, dan akan aktif selama aplikasi Anda aktif. Anda bisa mendapatkannya dengan memanggil Context.getApplicationContext() atau Activity.getApplication().

    val context = Context.getApplicationContext()
    
  2. Buat instance FactoryRegistry dengan semua karakteristik dan jenis perangkat yang ingin Anda gunakan di aplikasi.

    Untuk panduan ini, kami telah menyarankan beberapa perangkat umum (jenis perangkat Lampu, Steker, Sensor, Sakelar, dan Termostat, serta kehadiran dan fitur Asisten untuk otomatisasi), jika Anda tidak yakin dengan perangkat yang Anda butuhkan. Untuk mempelajari lebih lanjut, lihat Pendaftaran jenis perangkat dan karakteristik.

    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))
    

    Pernyataan impor untuk setiap karakteristik dan jenis perangkat yang terdaftar di sini diperlukan (Android Studio akan meminta Anda untuk menambahkannya).

  3. Buat instance HomeConfig menggunakan konteks coroutine Dispatchers.IO dan instance registry Anda.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Terakhir, buat instance singleton dari Home, yang merupakan titik entri ke API, menggunakan konteks dan HomeConfig.

    val homeManager: HomeClient = Home.getClient(context, homeConfig)
    

Untuk menghindari error dengan sesi yang tidak valid, hanya instance singleton Home yang harus dibuat, dengan menggabungkannya dalam deklarasi objek.

Misalnya, aplikasi contoh melakukannya dengan cara ini:

internal object HomeClientModule {
  @Provides
  @Singleton
  fun provideHomeClient(@ApplicationContext context: Context): HomeClient {
    return Home.getClient(
      context,
      HomeConfig(
        coroutineContext = IODispatcherModule.provideIoDispatcher(),
        factoryRegistry = registry,
      ),
    )
  }
}

Pendaftaran fitur dan jenis perangkat

Class FactoryRegistry membantu developer mengoptimalkan ukuran biner aplikasi dengan memungkinkan mereka secara eksplisit menunjukkan karakteristik dan jenis perangkat yang digunakan oleh aplikasi mereka.

Perhatikan bahwa izin dan registry pabrik dipisahkan. Oleh karena itu, sifat dan jenis yang tidak terdaftar yang tersedia untuk aplikasi Anda menggunakan izin tetapi tidak disertakan dalam registry factory tidak dapat diakses menggunakan Automation API atau ditampilkan dalam panggilan metode traits() atau types() secara massal.