Android पर होम को शुरू करना

Android के लिए Home API का इस्तेमाल करने से पहले, आपको अपने ऐप्लिकेशन में होम को शुरू करना होगा. इस चरण में, आपको लोकल कॉन्टेक्स्ट के लिए सिंगलटन इंस्टेंस Home बनाना होगा.

एक बार में, Home का सिर्फ़ एक इंस्टेंस चालू होना चाहिए.

यह Home API का एंट्री पॉइंट है. इसमें यह भी तय किया जाता है कि Device & Structure और Automation API के साथ, किन डिवाइस टाइप और किन ट्रेट का इस्तेमाल करना है. अगर आपने अभी-अभी Google Home के साथ काम करने वाले डिवाइसों का इस्तेमाल शुरू किया है और आपको यह नहीं पता कि कौनसी सुविधाएं या डिवाइस टाइप रजिस्टर करने हैं, तो हमने इस गाइड में कुछ सामान्य सुझाव दिए हैं.

होम इंस्टेंस बनाना

शुरू करने के लिए, इन पैकेज को अपने ऐप्लिकेशन में इंपोर्ट करें:

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

Home APIs को शुरू करने के लिए:

  1. Application कॉन्टेक्स्ट का रेफ़रंस पाएं. यह कॉन्टेक्स्ट, किसी भी गतिविधि के लाइफ़साइकल पर निर्भर नहीं करता. यह तब तक उपलब्ध रहेगा, जब तक आपका ऐप्लिकेशन चालू है. इसे पाने के लिए, Activity या Service के बीच getApplicationContext() पर कॉल करें:

    val 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. Dispatchers.IO कोरुटीन कॉन्टेक्स्ट और अपने रजिस्ट्री इंस्टेंस का इस्तेमाल करके, HomeConfig को इंस्टैंटिएट करें.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. आखिर में, कॉन्टेक्स्ट और HomeConfig का इस्तेमाल करके, 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 क्लास की मदद से डेवलपर, अपने ऐप्लिकेशन के बाइनरी साइज़ को ऑप्टिमाइज़ कर सकते हैं. इसके लिए, उन्हें साफ़ तौर पर यह बताना होता है कि उनके ऐप्लिकेशन में कौनसी खासियतें और डिवाइस टाइप इस्तेमाल किए जाते हैं.

ध्यान दें कि अनुमतियां और फ़ैक्ट्री रजिस्ट्री अलग-अलग होती हैं. इसलिए, अनुमति का इस्तेमाल करके आपके ऐप्लिकेशन के लिए उपलब्ध, लेकिन फ़ैक्ट्री रजिस्ट्री में शामिल नहीं किए गए बिना रजिस्टर किए गए ट्रेट और टाइप को Automation API का इस्तेमाल करके ऐक्सेस नहीं किया जा सकता. साथ ही, उन्हें एक साथ कई traits() या types() तरीके से कॉल करने पर भी नहीं दिखाया जाता.