Android की होम स्क्रीन, Android की सुविधा वाले ज़्यादातर डिवाइसों पर उपलब्ध होती है. इसकी मदद से उपयोगकर्ता, कॉन्टेंट को तुरंत ऐक्सेस करने के लिए ऐप्लिकेशन विजेट (या विजेट) एम्बेड कर सकता है. अगर होम स्क्रीन बदलने वाला या इसी तरह का कोई ऐप्लिकेशन बनाया जा रहा है, तो उपयोगकर्ता को विजेट एम्बेड करने की सुविधा भी दी जा सकती है. इसके लिए, AppWidgetHost को लागू करें. ज़्यादातर ऐप्लिकेशन को ऐसा करने की ज़रूरत नहीं होती. हालांकि, अगर आपको अपना होस्ट बनाना है, तो यह समझना ज़रूरी है कि होस्ट, किन कानूनी शर्तों को स्वीकार करता है.
इस पेज पर, कस्टम AppWidgetHost को लागू करने से जुड़ी ज़िम्मेदारियों के बारे में बताया गया है. AppWidgetHost को लागू करने का तरीका जानने के लिए, Android की होम स्क्रीन के सोर्स कोड LauncherAppWidgetHost को देखें.
कस्टम AppWidgetHost लागू करने के लिए, यहां मुख्य क्लास और कॉन्सेप्ट की खास जानकारी दी गई है:
ऐप्लिकेशन विजेट होस्ट:
AppWidgetHost, ऐप्लिकेशन विजेट सेवा के साथ इंटरैक्ट करने की सुविधा देता है. यह सुविधा उन ऐप्लिकेशन के लिए होती है जो अपने यूज़र इंटरफ़ेस (यूआई) में विजेट एम्बेड करते हैं.AppWidgetHostका आईडी, होस्ट के पैकेज में यूनीक होना चाहिए. यह आईडी, होस्ट के सभी इस्तेमाल के लिए बना रहता है. आईडी आम तौर पर एक हार्डकोड की गई वैल्यू होती है, जिसे आपको अपने ऐप्लिकेशन में असाइन करना होता है.ऐप्लिकेशन विजेट आईडी: हर विजेट इंस्टेंस को बाइंडिंग के समय एक यूनीक आईडी असाइन किया जाता है.
bindAppWidgetIdIfAllowed()देखें. साथ ही, ज़्यादा जानकारी के लिए डेटा बाइंडिंग वाले विजेट सेक्शन देखें. होस्ट,allocateAppWidgetId()का इस्तेमाल करके यूनीक आईडी हासिल करता है. यह आईडी, विजेट के लाइफ़टाइम तक बना रहता है. इसे सिर्फ़ होस्ट से मिटाया जा सकता है. होस्ट से जुड़ी किसी भी स्थिति को होस्टिंग पैकेज के ज़रिए सेव किया जाना चाहिए. जैसे, विजेट का साइज़ और जगह. साथ ही, इसे ऐप्लिकेशन विजेट आईडी से जोड़ा जाना चाहिए.ऐप्लिकेशन विजेट होस्ट व्यू:
AppWidgetHostViewको एक फ़्रेम के तौर पर समझें. जब भी विजेट को दिखाया जाना होता है, तब उसे इस फ़्रेम में रैप किया जाता है. जब भी होस्ट, विजेट को बड़ा करती है, तब हर बार विजेट कोAppWidgetHostViewसे जोड़ा जाता है.- डिफ़ॉल्ट रूप से, सिस्टम एक
AppWidgetHostViewबनाता है. हालांकि, होस्ट इसे बढ़ाकरAppWidgetHostViewकी अपनी सबक्लास बना सकता है. - Android 12 (एपीआई लेवल 31) से,
AppWidgetHostViewने डाइनैमिक तरीके से ओवरलोड किए गए रंगों को मैनेज करने के लिए,setColorResources()औरresetColorResources()तरीके पेश किए हैं. होस्ट की यह ज़िम्मेदारी है कि वह इन तरीकों के लिए रंग उपलब्ध कराए.
- डिफ़ॉल्ट रूप से, सिस्टम एक
विकल्पों का बंडल:
AppWidgetHost, विकल्पों के बंडल का इस्तेमाल करकेAppWidgetProviderको यह जानकारी देता है कि विजेट कैसे दिखाया जाता है. उदाहरण के लिए, साइज़ रेंज की सूची और विजेट लॉकस्क्रीन पर है या होम स्क्रीन पर. इस जानकारी सेAppWidgetProviderको यह तय करने में मदद मिलती है कि विजेट का कॉन्टेंट और लुक कैसा होना चाहिए. यह इस बात पर निर्भर करता है कि विजेट को कैसे और कहां दिखाया जा रहा है. किसी विजेट के बंडल में बदलाव करने के लिए,updateAppWidgetOptions()औरupdateAppWidgetSize()का इस्तेमाल किया जा सकता है. इन दोनों तरीकों से,AppWidgetProviderकेonAppWidgetOptionsChanged()कॉलबैक को ट्रिगर किया जाता है.
विजेट बाइंड करना
जब कोई उपयोगकर्ता किसी होस्ट में कोई विजेट जोड़ता है, तो बाइंडिंग नाम की प्रोसेस होती है. बाइंडिंग का मतलब है, किसी ऐप्लिकेशन विजेट आईडी को किसी खास होस्ट और किसी खास AppWidgetProvider से जोड़ना.
बाइंडिंग एपीआई की मदद से, होस्ट के लिए बाइंडिंग के लिए कस्टम यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराना भी मुमकिन होता है. इस प्रोसेस का इस्तेमाल करने के लिए, आपके ऐप्लिकेशन को होस्ट के मेनिफ़ेस्ट में BIND_APPWIDGET अनुमति का एलान करना होगा:
<uses-permission android:name="android.permission.BIND_APPWIDGET" />
हालांकि, यह तो सिर्फ़ पहला कदम है. रनटाइम के दौरान, उपयोगकर्ता को आपके ऐप्लिकेशन को साफ़ तौर पर अनुमति देनी होगी, ताकि वह होस्ट में विजेट जोड़ सके. यह जांचने के लिए कि आपके ऐप्लिकेशन के पास विजेट जोड़ने की अनुमति है या नहीं, bindAppWidgetIdIfAllowed() तरीके का इस्तेमाल करें. अगर bindAppWidgetIdIfAllowed(), false दिखाता है, तो आपके ऐप्लिकेशन को एक डायलॉग दिखाना होगा. इसमें उपयोगकर्ता से अनुमति देने के लिए कहा जाएगा: "अनुमति दें" का इस्तेमाल, मौजूदा विजेट को जोड़ने के लिए किया जाता है. वहीं, "हमेशा अनुमति दें" का इस्तेमाल, आने वाले समय में जोड़े जाने वाले सभी विजेट के लिए किया जाता है.
इस स्निपेट में, डायलॉग दिखाने का तरीका बताया गया है:
Kotlin
val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_BIND).apply { putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName) // This is the options bundle described in the preceding section. putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options) } startActivityForResult(intent, REQUEST_BIND_APPWIDGET)
Java
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName); // This is the options bundle described in the preceding section. intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options); startActivityForResult(intent, REQUEST_BIND_APPWIDGET);
होस्ट को यह जांच करनी होगी कि उपयोगकर्ता ने जो विजेट जोड़ा है उसे कॉन्फ़िगर करने की ज़रूरत है या नहीं. ज़्यादा जानकारी के लिए, उपयोगकर्ताओं को ऐप्लिकेशन विजेट कॉन्फ़िगर करने की अनुमति देना लेख पढ़ें.
होस्ट की ज़िम्मेदारियां
AppWidgetProviderInfo मेटाडेटा का इस्तेमाल करके, विजेट के लिए कई कॉन्फ़िगरेशन सेटिंग तय की जा सकती हैं.
इन कॉन्फ़िगरेशन विकल्पों को वापस पाया जा सकता है. इनके बारे में यहां दिए गए सेक्शन में ज़्यादा जानकारी दी गई है. इन्हें विजेट उपलब्ध कराने वाली कंपनी से जुड़े AppWidgetProviderInfo ऑब्जेक्ट से वापस पाया जा सकता है.
Android के जिस वर्शन को टारगेट किया जा रहा है उससे कोई फ़र्क़ नहीं पड़ता. सभी होस्ट की ये ज़िम्मेदारियां होती हैं:
विजेट जोड़ते समय, विजेट आईडी को पहले बताए गए तरीके से असाइन करें. जब किसी विजेट को होस्ट से हटा दिया जाता है, तो विजेट आईडी को हटाने के लिए कॉल
deleteAppWidgetId()करें.विजेट जोड़ते समय, देखें कि कॉन्फ़िगरेशन गतिविधि को लॉन्च करने की ज़रूरत है या नहीं. आम तौर पर, होस्ट को विजेट के कॉन्फ़िगरेशन की गतिविधि शुरू करनी होती है. ऐसा तब होता है, जब गतिविधि मौजूद हो और
configuration_optionalऔरreconfigurable, दोनों फ़्लैग सेट करके उसे'ज़रूरी नहीं' के तौर पर मार्क न किया गया हो. ज़्यादा जानकारी के लिए, कॉन्फ़िगरेशन गतिविधि से विजेट अपडेट करना लेख पढ़ें. कई विजेट को दिखाने से पहले, यह चरण पूरा करना ज़रूरी है.विजेट,
AppWidgetProviderInfoमेटाडेटा में डिफ़ॉल्ट चौड़ाई और ऊंचाई तय करते हैं. इन वैल्यू को सेल में तय किया जाता है. अगरtargetCellWidthऔरtargetCellHeightतय किए गए हैं, तो Android 12 से शुरू होने वाले वर्शन में ऐसा किया जाता है. अगर सिर्फ़minWidthऔरminHeightतय किए गए हैं, तो ऐसा डीपीआई में किया जाता है. विजेट के साइज़ के एट्रिब्यूट देखें.पक्का करें कि विजेट को कम से कम इतने डीपी के साथ लेआउट किया गया हो. उदाहरण के लिए, कई होस्ट आइकॉन और विजेट को ग्रिड में अलाइन करते हैं. इस मामले में, होस्ट डिफ़ॉल्ट रूप से ऐसे विजेट को जोड़ता है जिसमें कम से कम सेल हों और जो
minWidthऔरminHeightकंस्ट्रेंट को पूरा करता हो.
पिछले सेक्शन में बताई गई ज़रूरी शर्तों के अलावा, प्लैटफ़ॉर्म के कुछ वर्शन में ऐसी सुविधाएं होती हैं जिनसे होस्ट की नई ज़िम्मेदारियां तय होती हैं.
टारगेट किए गए Android वर्शन के आधार पर, अपनी रणनीति तय करना
Android 12
Android 12 (एपीआई लेवल 31) में एक अतिरिक्त List<SizeF> बंडल किया गया है. इसमें डीपीआई में संभावित साइज़ की सूची होती है. यह सूची बताती है कि कोई विजेट इंस्टेंस, विकल्पों के बंडल में कितना साइज़ ले सकता है.
उपलब्ध साइज़ की संख्या, होस्ट के लागू करने के तरीके पर निर्भर करती है. आम तौर पर, होस्ट, फ़ोन के लिए दो साइज़ उपलब्ध कराते हैं—पोर्ट्रेट और लैंडस्केप. साथ ही, फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए चार साइज़ उपलब्ध कराते हैं.
AppWidgetProvider, RemoteViews को ज़्यादा से ज़्यादा MAX_INIT_VIEW_COUNT (16) अलग-अलग तरह के RemoteViews दे सकता है.
AppWidgetProvider ऑब्जेक्ट, List<SizeF> में मौजूद हर साइज़ के लिए RemoteViews ऑब्जेक्ट को मैप करते हैं. इसलिए, MAX_INIT_VIEW_COUNT से ज़्यादा साइज़ न दें.
Android 12 में, dps में maxResizeWidth और maxResizeHeight एट्रिब्यूट भी पेश किए गए हैं. हमारा सुझाव है कि कम से कम एक एट्रिब्यूट का इस्तेमाल करने वाला विजेट, एट्रिब्यूट के लिए तय की गई साइज़ की सीमा से ज़्यादा न हो.
अन्य संसाधन
Glanceरेफ़रंस दस्तावेज़ देखें.