خانه را اولیه کنید

قبل از استفاده از هر یک از APIهای Home، باید خانه را در برنامه خود مقداردهی اولیه کنید. در این مرحله، یک نمونه تکی از Home برای زمینه محلی ایجاد می کنید.

فقط یک نمونه از Home باید در هر زمان فعال باشد.

این نقطه ورود به API های Home است و همچنین شامل اعلام ویژگی ها و انواع دستگاه هایی است که می خواهید با Device & Structure و API های اتوماسیون استفاده کنید. اگر به تازگی با اکوسیستم Google Home شروع کرده‌اید و مطمئن نیستید که چه ویژگی‌ها یا نوع دستگاه‌هایی را باید ثبت کنید، ما برخی از رایج‌ترین آنها را در اینجا در این راهنما پیشنهاد کرده‌ایم.

یک نمونه Home ایجاد کنید

برای شروع، این بسته ها را به برنامه خود وارد کنید:

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

برای مقداردهی اولیه APIهای Home:

  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. در نهایت، نمونه 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() برگردانده نمی‌شوند.