विजेट होस्ट बनाएं

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 विजेट के कॉन्टेंट और लुक को, जहां यह दिखता है. Google Analytics 4 पर माइग्रेट करने के लिए, 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 में डिफ़ॉल्ट चौड़ाई और ऊंचाई तय करते हैं मेटाडेटा. ये वैल्यू सेल में तय की जाती हैं. ये वैल्यू इस तारीख से शुरू होती हैं Android 12, अगर targetCellWidth और targetCellHeight चुना गया है—या अगर सिर्फ़ minWidth और minHeight बताए गए हैं, तो dps. यहां जाएं: विजेट के साइज़ से जुड़े एट्रिब्यूट.

    पक्का करें कि बैज में कम से कम इतने डीपी हों. इसके लिए उदाहरण के लिए, कई होस्ट, आइकॉन और विजेट को ग्रिड में अलाइन करते हैं. इस स्थिति में, डिफ़ॉल्ट तौर पर होस्ट, सेल की कम से कम संख्या का इस्तेमाल करके विजेट जोड़ता है 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 रेफ़रंस दस्तावेज़ देखें.