إعداد المنزل على Android

قبل استخدام أيٍّ من واجهات برمجة تطبيقات Home على نظام Android، يجب تهيئة Home في تطبيقك. في هذه الخطوة، ستنشئ نسخة singleton من Home للسياق المحلي.

يجب أن يكون مثيل واحد فقط من Home نشطًا في كل مرة.

هذه هي نقطة الدخول إلى واجهات برمجة تطبيقات Home، وتشمل أيضًا تحديد السمات وأنواع الأجهزة التي تنوي استخدامها مع واجهات برمجة تطبيقات Device & Structure وAutomation. إذا كنت قد بدأت للتو في استخدام نظام 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. لا يعتمد سياق التطبيق هذا على أي دورة حياة للنشاط، وسيظل نشطًا طالما أنّ تطبيقك نشط. يمكنك الحصول عليه من خلال الاتصال بالرقم getApplicationContext() خلال Activity أو Service:

    val context = getApplicationContext()
    
  2. أنشئ مثيلاً FactoryRegistry يتضمّن جميع السمات وأنواع الأجهزة التي تنوي استخدامها في تطبيقك.

    في هذا الدليل، اقترحنا بعض الأنواع الشائعة (أنواع الأجهزة مثل المصباح والقابس والحسّاس والمفتاح ومنظّم الحرارة، وسمات الحضور و"مساعد Google" لعمليات التشغيل الآلي)، في حال لم تكن متأكدًا مما تحتاج إليه. لمعرفة المزيد، راجع تسجيل السمات وأنواع الأجهزة.

    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، وهو نقطة الدخول إلى واجهات برمجة التطبيقات، باستخدام السياق و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().