Android होम स्क्रीन, ज़्यादातर Android डिवाइसों पर उपलब्ध होती है. इसकी मदद से, उपयोगकर्ता कॉन्टेंट को तुरंत ऐक्सेस करने के लिए, ऐप्लिकेशन विजेट (या विजेट) जोड़ सकते हैं. अगर होम स्क्रीन की जगह लेने वाला या मिलता-जुलता कोई ऐप्लिकेशन बनाया जा रहा है, तो उपयोगकर्ता को विजेट जोड़ने की अनुमति भी दी जा सकती है. इसके लिए, AppWidgetHost
को लागू करें. यह नहीं है
ऐसा कुछ जो सभी ऐप्स को करने की आवश्यकता होती है, लेकिन अगर आप अपना होस्ट बना रहे हैं, तो यह
यह समझौते की उन जवाबदेही को समझना ज़रूरी है जिनके लिए होस्ट साफ़ तौर पर सहमति देता है.
इस पेज पर, कस्टम AppWidgetHost
लागू करने से जुड़ी ज़िम्मेदारियों के बारे में बताया गया है. AppWidgetHost
को लागू करने का उदाहरण जानने के लिए, Android होम स्क्रीन LauncherAppWidgetHost
का सोर्स कोड देखें.
यहां मुख्य रूप से क्लास और कॉन्सेप्ट के बारे में बताया गया है, जो
कस्टम AppWidgetHost
:
ऐप्लिकेशन विजेट होस्ट:
AppWidgetHost
, उन ऐप्लिकेशन के लिए AppWidget सेवा के साथ इंटरैक्शन करता है जो अपने यूज़र इंटरफ़ेस (यूआई) में विजेट जोड़ते हैं.AppWidgetHost
के लिए, ऐसा आईडी होना चाहिए जो होस्ट के पैकेज में यूनीक हो. यह आईडी मौजूद है के सभी इस्तेमाल के लिए कर सकते हैं. आम तौर पर, आईडी एक हार्डकोड वैल्यू होती है, जिसे असाइन करें.ऐप्लिकेशन विजेट आईडी: बाइंड करने के समय, हर विजेट इंस्टेंस को एक यूनीक आईडी असाइन किया जाता है. यहां जाएं:
bindAppWidgetIdIfAllowed()
और ज़्यादा जानकारी के लिए, बाइंडिंग विजेट सेक्शन देखें. कॉन्टेंट बनाने होस्ट इसका इस्तेमाल करके यूनीक आईडी हासिल करता हैallocateAppWidgetId()
. यह आईडी विजेट के जीवनकाल तक बना रहता है, जब तक कि इसे होस्ट. होस्ट से जुड़ी किसी भी स्थिति को होस्टिंग पैकेज से बनाए रखा जाना चाहिए. जैसे, विजेट का साइज़ और जगह. साथ ही, यह ऐप्लिकेशन विजेट आईडी से जुड़ा होना चाहिए.ऐप्लिकेशन विजेट होस्ट व्यू:
AppWidgetHostView
को एक फ़्रेम के तौर पर देखें. जब भी विजेट को दिखाना हो, तब उसे इस फ़्रेम में लपेटा जाता है. विजेट है जब भी विजेटAppWidgetHostView
से जुड़ा होता है और होस्ट.- डिफ़ॉल्ट रूप से, सिस्टम एक
AppWidgetHostView
बनाता है, लेकिन होस्ट ये काम कर सकता हैAppWidgetHostView
की अपनी सब-क्लास बनाने के लिए, उसे बढ़ाएं. - Android 12 (एपीआई लेवल 31) से,
AppWidgetHostView
में डाइनैमिक तौर पर ओवरलोड किए गए रंगों को मैनेज करने के लिए,setColorResources()
औरresetColorResources()
तरीके उपलब्ध कराए गए हैं. इन तरीकों के लिए रंग उपलब्ध कराने की ज़िम्मेदारी, होस्ट की होती है.
- डिफ़ॉल्ट रूप से, सिस्टम एक
विकल्पों का बंडल:
AppWidgetHost
इन कामों के लिए, विकल्प बंडल का इस्तेमाल करता है अपनी जानकारी कोAppWidgetProvider
विजेट किस तरह से दिखता है—उदाहरण के लिए, साइज़ रेंज की सूची—और क्या विजेट लॉकस्क्रीन या होम स्क्रीन पर हो. इस जानकारी की मदद से,AppWidgetProvider
यह तय कर सकता है कि विजेट को कहां और कैसे दिखाया जाए. साथ ही, विजेट के कॉन्टेंट और उसके दिखने के तरीके में भी बदलाव किया जा सकता है. विजेट के बंडल में बदलाव करने के लिए,updateAppWidgetOptions()
औरupdateAppWidgetSize()
का इस्तेमाल किया जा सकता है. ये दोनों तरीके आपकी साइट पर ट्रैफ़िकonAppWidgetOptionsChanged()
AppWidgetProvider
पर कॉलबैक करें.
बाइंडिंग विजेट
जब कोई उपयोगकर्ता होस्ट में कोई विजेट जोड़ता है, तो बाइंडिंग की प्रोसेस शुरू होती है. बाइंडिंग
किसी खास ऐप्लिकेशन विजेट आईडी को किसी खास होस्ट और
खास 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>
बंडल किया जाता है. इसमें, डीपीएस में उन संभावित साइज़ की सूची होती है जो विकल्प बंडल में विजेट इंस्टेंस ले सकता है.
उपलब्ध साइज़ की संख्या, होस्ट के लागू होने के तरीके पर निर्भर करती है. आम तौर पर, होस्ट फ़ोन के लिए दो साइज़ उपलब्ध कराते हैं—पोर्ट्रेट और लैंडस्केप—और फ़ोल्ड किए जा सकने वाले डिवाइसों के लिए चार साइज़.
इन इवेंट की संख्या MAX_INIT_VIEW_COUNT
(16) है
RemoteViews
, जिसे AppWidgetProvider
दे सकता है
RemoteViews
पर टैप करें.
AppWidgetProvider
ऑब्जेक्ट, RemoteViews
ऑब्जेक्ट को List<SizeF>
में मौजूद हर साइज़ से मैप करते हैं. इसलिए, MAX_INIT_VIEW_COUNT
से ज़्यादा साइज़ न दें.
Android 12 में
maxResizeWidth
और
maxResizeHeight
डीपी में एट्रिब्यूट. हमारा सुझाव है कि इनमें से कम से कम एक एट्रिब्यूट का इस्तेमाल करने वाला विजेट, एट्रिब्यूट में बताए गए साइज़ से ज़्यादा न हो.
अन्य संसाधन
Glance
रेफ़रंस दस्तावेज़ देखें.