ऐप्लिकेशन विजेट, ऐप्लिकेशन के छोटे-छोटे व्यू होते हैं. इन्हें दूसरी चीज़ों में जोड़ा जा सकता है ऐप्लिकेशन—जैसे कि होम स्क्रीन—और समय-समय पर अपडेट पाते रहते हैं. ये यूज़र इंटरफ़ेस में व्यू को विजेट कहा जाता है और कोई ऐसा व्यक्ति जो ऐप्लिकेशन विजेट की सेवा देने वाली कंपनी (या विजेट सेवा देने वाली कंपनी) के साथ जुड़ा हो. एक ऐप्लिकेशन कॉम्पोनेंट जो दूसरे विजेट को होल्ड करता है, उन्हें ऐप्लिकेशन विजेट होस्ट (या विजेट होस्ट) कहा जाता है. इमेज 1 एक नमूना संगीत विजेट दिखाता है:
इस दस्तावेज़ में, विजेट की सेवा देने वाली कंपनी का इस्तेमाल करके, विजेट को पब्लिश करने का तरीका बताया गया है. इसके लिए
नया AppWidgetHost
बनाने के बारे में जानकारी
ऐप विजेट होस्ट करें, विजेट होस्ट बनाने की सुविधा देखें.
अपना विजेट डिज़ाइन करने के बारे में जानने के लिए, ऐप्लिकेशन विजेट की खास जानकारी देखें.
विजेट के कॉम्पोनेंट
विजेट बनाने के लिए, आपको नीचे दिए गए बुनियादी कॉम्पोनेंट की ज़रूरत होगी:
AppWidgetProviderInfo
ऑब्जेक्ट- यह विजेट के मेटाडेटा के बारे में बताती है, जैसे कि विजेट का लेआउट, अपडेट
फ़्रीक्वेंसी और
AppWidgetProvider
क्लास की जानकारी शामिल है.AppWidgetProviderInfo
को एक्सएमएल में तय किया गया है, जैसे कि दिया गया है. AppWidgetProvider
क्लास- यह उन बुनियादी तरीकों के बारे में बताता है जो प्रोग्राम के हिसाब से आपको
विजेट. इसके ज़रिए, आपको विजेट अपडेट होने पर ब्रॉडकास्ट मिलते हैं.
चालू किया गया, बंद किया गया या मिटाया गया. आप
AppWidgetProvider
की घोषणा करते हैं मेनिफ़ेस्ट करें और फिर इसे इस तरह से लागू करें इस दस्तावेज़ में बताया गया है. - लेआउट देखें
- यह बैज के लिए शुरुआती लेआउट के बारे में बताता है. लेआउट को XML के फ़ॉर्मैट में होना चाहिए, जैसा कि इस दस्तावेज़ में बताया गया है.
दूसरी इमेज में दिखाया गया है कि ये कॉम्पोनेंट, ऐप्लिकेशन के विजेट की पूरी प्रोसेसिंग में कैसे फ़िट होते हैं फ़्लो.
अगर आपके विजेट को उपयोगकर्ता कॉन्फ़िगरेशन की ज़रूरत है, तो ऐप्लिकेशन के विजेट का कॉन्फ़िगरेशन लागू करें गतिविधि. इस गतिविधि से उपयोगकर्ता विजेट की सेटिंग में बदलाव कर सकते हैं—उदाहरण के लिए, घड़ी विजेट के लिए समय क्षेत्र.
- Android 12 (एपीआई लेवल 31) के बाद के वर्शन में, डिफ़ॉल्ट वैल्यू उपलब्ध कराई जा सकती है कॉन्फ़िगर किया जा सकता है और उपयोगकर्ताओं को विजेट को बाद में फिर से कॉन्फ़िगर करने की सुविधा मिलती है. देखें विजेट का डिफ़ॉल्ट कॉन्फ़िगरेशन और चालू करें सेव किए गए विजेट फिर से कॉन्फ़िगर करेंगे देखें.
- Android 11 (एपीआई लेवल 30) या इससे पहले के वर्शन में, यह गतिविधि हर बार लॉन्च होती है उपयोगकर्ता, विजेट को अपनी होम स्क्रीन पर जोड़ता है.
हम आपको, नीचे दिए गए सुधारों का भी सुझाव देते हैं: ज़रूरत के हिसाब से विजेट लेआउट, कई तरह के बदलाव, बेहतर विजेट, कलेक्शन विजेट, और विजेट बनाना होस्ट.
AppWidgetProviderInfo एक्सएमएल का एलान करें
AppWidgetProviderInfo
ऑब्जेक्ट, विजेट की ज़रूरी क्वालिटी के बारे में बताता है.
एक का इस्तेमाल करके, एक्सएमएल संसाधन फ़ाइल में AppWidgetProviderInfo
ऑब्जेक्ट के बारे में बताएं
<appwidget-provider>
एलिमेंट खोलें और उसे प्रोजेक्ट के res/xml/
फ़ोल्डर में सेव करें.
यह नीचे दिए गए उदाहरण में दिखाया गया है:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="40dp"
android:minHeight="40dp"
android:targetCellWidth="1"
android:targetCellHeight="1"
android:maxResizeWidth="250dp"
android:maxResizeHeight="120dp"
android:updatePeriodMillis="86400000"
android:description="@string/example_appwidget_description"
android:previewLayout="@layout/example_appwidget_preview"
android:initialLayout="@layout/example_loading_appwidget"
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
android:resizeMode="horizontal|vertical"
android:widgetCategory="home_screen"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>
विजेट के साइज़ से जुड़े एट्रिब्यूट
डिफ़ॉल्ट होम स्क्रीन, सेल के ग्रिड के आधार पर विजेट को अपनी विंडो में रखती है जिनकी लंबाई और चौड़ाई तय होती है. ज़्यादातर होम स्क्रीन पर विजेट सिर्फ़ चालू होते हैं साइज़ जो ग्रिड सेल के पूर्णांक के मल्टीपल होते हैं—उदाहरण के लिए, दो सेल हॉरिज़ॉन्टल तौर पर, तीन सेल वर्टिकल तौर पर.
विजेट के साइज़ से जुड़ी विशेषताओं की मदद से, आप विजेट के लिए डिफ़ॉल्ट साइज़ तय कर सकते हैं और विजेट के साइज़ के लिए निचली और ऊपरी सीमाएं दें. इस संदर्भ में, विजेट का डिफ़ॉल्ट साइज़, वह साइज़ होता है जो पहली बार होने पर विजेट को मिलता है होम स्क्रीन पर जोड़ा गया.
नीचे दी गई टेबल में, <appwidget-provider>
एट्रिब्यूट के बारे में बताया गया है
विजेट के साइज़ के लिए:
एट्रिब्यूट और ब्यौरा | |
---|---|
targetCellWidth और
targetCellHeight (Android 12),
minWidth और minHeight |
targetCellWidth और
targetCellHeight , और minWidth और
minHeight —ताकि आपका ऐप्लिकेशन दोबारा इस्तेमाल किया जा सके
minWidth और minHeight , अगर उपयोगकर्ता का डिवाइस
targetCellWidth और
targetCellHeight . अगर यह सुविधा उपलब्ध है, तो
targetCellWidth और targetCellHeight एट्रिब्यूट
minWidth और minHeight के ऊपर प्राथमिकता लें
एट्रिब्यूट.
|
minResizeWidth और
minResizeHeight |
विजेट के कम से कम साइज़ के बारे में बताएं. इन वैल्यू से पता चलता है कि
ऐसा साइज़ जिसके तहत विजेट पढ़ा नहीं जा सकता या किसी काम का नहीं रहता. इसका इस्तेमाल किया जा रहा है
इन एट्रिब्यूट की मदद से उपयोगकर्ता, विजेट का साइज़ छोटा करके बड़ा कर सकते हैं
के साइज़ से ज़्यादा. यह minResizeWidth एट्रिब्यूट है
अगर यह minWidth से बड़ा है या हॉरिज़ॉन्टल है, तो अनदेखा कर दिया जाता है
साइज़ बदलने की सुविधा चालू नहीं है. यहां जाएं:
resizeMode . इसी तरह,
अगर minResizeHeight एट्रिब्यूट की वैल्यू इससे बड़ी होती है, तो उसे नज़रअंदाज़ कर दिया जाता है
minHeight या अगर वर्टिकल साइज़ बदलने की सुविधा चालू नहीं है. |
maxResizeWidth और
maxResizeHeight |
विजेट के लिए सुझाए गए ज़्यादा से ज़्यादा साइज़ के बारे में बताएं. अगर वैल्यू
ग्रिड सेल डाइमेंशन का मल्टीपल, उन्हें सबसे नज़दीक के पूर्णांक में बदल दिया जाता है
सेल का साइज़. maxResizeWidth एट्रिब्यूट को अनदेखा किया जाता है, अगर ऐसा है
minWidth से कम हो या हॉरिज़ॉन्टल साइज़ न हो
चालू किया गया. resizeMode देखें. इसी तरह,
अगर maxResizeHeight एट्रिब्यूट की वैल्यू इससे बड़ी होती है, तो उसे अनदेखा कर दिया जाता है
minHeight से ज़्यादा हो या वर्टिकल साइज़ बदलने की सुविधा चालू न हो.
Android 12 में पेश किया गया. |
resizeMode |
उन नियमों को तय करता है जिनके हिसाब से विजेट का साइज़ बदला जा सकता है. आप इसका इस्तेमाल कर सकते हैं
होम स्क्रीन विजेट का हॉरिज़ॉन्टल, वर्टिकल तौर पर साइज़ बदलने की सुविधा,
या दोनों ऐक्सिस पर होता है. उपयोगकर्ता, टच & इसके साइज़ बदलने वाले हैंडल दिखाने के लिए विजेट को होल्ड पर रखें,
इसके बाद, हॉरिज़ॉन्टल या वर्टिकल हैंडल को खींचें और उसका साइज़
लेआउट ग्रिड. resizeMode एट्रिब्यूट की वैल्यू में ये शामिल हैं
horizontal , vertical , और none . यहां की यात्रा पर हूं
यह एलान कर सकते हैं कि विजेट का साइज़ हॉरिज़ॉन्टल तौर पर और वर्टिकल तौर पर बदला जा सकता है.
horizontal|vertical . |
उदाहरण
यह समझाने के लिए कि पिछली टेबल में दिए गए एट्रिब्यूट, विजेट के साइज़ पर कैसे असर डालते हैं, नीचे दी गई जानकारी की उम्मीद करते हैं:
- ग्रिड सेल की चौड़ाई 30 डीपी और ऊंचाई 50 डीपी होती है.
- यहां एट्रिब्यूट की खास बातें बताई गई हैं:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="80dp"
android:minHeight="80dp"
android:targetCellWidth="2"
android:targetCellHeight="2"
android:minResizeWidth="40dp"
android:minResizeHeight="40dp"
android:maxResizeWidth="120dp"
android:maxResizeHeight="120dp"
android:resizeMode="horizontal|vertical" />
Android 12 और उसके बाद के वर्शन में उपलब्ध:
targetCellWidth
और targetCellHeight
एट्रिब्यूट को डिफ़ॉल्ट के तौर पर इस्तेमाल करें
विजेट का साइज़.
विजेट का साइज़, डिफ़ॉल्ट रूप से 2x2 होता है. विजेट का आकार बदलकर 2x1 किया जा सकता है या 4x3 तक.
Android 11 और उससे पहले वाले वर्शन पर:
वैल्यू के डिफ़ॉल्ट साइज़ का हिसाब लगाने के लिए, minWidth
और minHeight
एट्रिब्यूट का इस्तेमाल करें
विजेट.
डिफ़ॉल्ट चौड़ाई = Math.ceil(80 / 30)
= 3
डिफ़ॉल्ट ऊंचाई = Math.ceil(80 / 50)
= 2
विजेट का साइज़, डिफ़ॉल्ट रूप से 3x2 होता है. विजेट का आकार बदलकर 2x1 किया जा सकता है या सकता है.
विजेट के अन्य एट्रिब्यूट
नीचे दी गई टेबल में, <appwidget-provider>
एट्रिब्यूट के बारे में बताया गया है
विजेट के साइज़ के अलावा, बाकी क्वालिटी के लिए भी बेहतर विकल्प हो सकते हैं.
एट्रिब्यूट और ब्यौरा | |
---|---|
updatePeriodMillis |
इससे पता चलता है कि विजेट फ़्रेमवर्क कितनी बार
onUpdate() पर कॉल करके AppWidgetProvider
कॉलबैक का तरीका. वास्तविक अपडेट के ठीक होने की गारंटी नहीं है
समय सबमिट करें, और हम आपको कम से कम इतनी बार अपडेट करने का सुझाव देते हैं
बैटरी बचाने के लिए—एक घंटे में एक बार से अधिक नहीं—भी संभव है.
अपडेट की सही अवधि चुनने से पहले, यहां दी गई सूची में शामिल चीज़ों के बारे में जानने के लिए,
देखें
विजेट अपडेट करने के लिए ऑप्टिमाइज़ेशन
कॉन्टेंट. |
initialLayout |
बैज के लेआउट के बारे में बताने वाले लेआउट रिसॉर्स पर ले जाता है. |
configure |
उपयोगकर्ता के विजेट जोड़ने पर लॉन्च होने वाली गतिविधि तय करता है, इससे विजेट की प्रॉपर्टी कॉन्फ़िगर की जा सकती हैं. यहां जाएं: उपयोगकर्ताओं को विजेट कॉन्फ़िगर करने की सुविधा दें. Android 12 से, अपने ऐप्लिकेशन के शुरुआती हिस्से को स्किप किया जा सकता है कॉन्फ़िगरेशन. देखें जानकारी के लिए, विजेट का डिफ़ॉल्ट कॉन्फ़िगरेशन देखें. |
description |
विजेट पिकर का विवरण तय करता है, ताकि विजेट. Android 12 में पेश किया गया. |
previewLayout (Android 12)
और previewImage (Android 11 और इससे पहले के वर्शन) |
previewImage , दोनों को बताने का सुझाव देते हैं
और previewLayout एट्रिब्यूट का इस्तेमाल करें, ताकि आपका ऐप्लिकेशन वापस इस्तेमाल किया जा सके
अगर उपयोगकर्ता के डिवाइस में सुविधा नहीं है, तो previewImage का इस्तेमाल करें
previewLayout . ज़्यादा जानकारी के लिए, यह देखें
स्केलेबल के साथ पुराने सिस्टम के साथ काम करने की सुविधा
विजेट की झलक.
|
autoAdvanceViewId |
इससे विजेट सबव्यू का व्यू आईडी अपने-आप बेहतर हो जाता है विजेट का होस्ट. |
widgetCategory |
यह बताता है कि आपका विजेट, होम स्क्रीन पर दिखाया जा सकता है या नहीं
(home_screen ), लॉक स्क्रीन (keyguard ) या
दोनों. Android 5.0 और उसके बाद वाले वर्शन के लिए, सिर्फ़ home_screen मान्य है.
|
widgetFeatures |
विजेट पर काम करने वाली सुविधाओं की जानकारी देता है. उदाहरण के लिए, अगर आपको
आपका विजेट, जब कोई उपयोगकर्ता उसे जोड़ता है, तो अपने डिफ़ॉल्ट कॉन्फ़िगरेशन का इस्तेमाल करने के लिए
दोनों
configuration_optional
और
reconfigurable
फ़्लैग. इससे किसी उपयोगकर्ता के बाद कॉन्फ़िगरेशन गतिविधि लॉन्च करने की ज़रूरत नहीं पड़ती
विजेट जोड़ता है. उपयोगकर्ता अब भी ये काम कर सकता है:
विजेट को फिर से कॉन्फ़िगर करना
उससे बचा जा सकता है. |
विजेट ब्रॉडकास्ट मैनेज करने के लिए, AppWidgetProvider क्लास का इस्तेमाल करें
AppWidgetProvider
क्लास, विजेट के ब्रॉडकास्ट को मैनेज करती है और विजेट को अपडेट करती है
विजेट लाइफ़साइकल इवेंट के रिस्पॉन्स के तौर पर. इन सेक्शन में,
मेनिफ़ेस्ट में AppWidgetProvider
के बारे में बताएं और फिर उसे लागू करें.
मेनिफ़ेस्ट में किसी विजेट का एलान करना
सबसे पहले, अपने ऐप्लिकेशन की AndroidManifest.xml
में AppWidgetProvider
क्लास का एलान करें
फ़ाइल से मिलता-जुलता है, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:
<receiver android:name="ExampleAppWidgetProvider"
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info" />
</receiver>
<receiver>
एलिमेंट के लिए android:name
एट्रिब्यूट की ज़रूरत होती है, जिससे पता चलता है कि
विजेट के लिए इस्तेमाल किया गया AppWidgetProvider
. कॉम्पोनेंट को एक्सपोर्ट नहीं करना चाहिए
जब तक कि आपके AppWidgetProvider
पर किसी अलग प्रोसेस को ब्रॉडकास्ट करने की ज़रूरत न हो,
आम तौर पर ऐसा नहीं होता.
<intent-filter>
एलिमेंट में,<action>
android:name
एट्रिब्यूट की वैल्यू सबमिट करें. इस एट्रिब्यूट से पता चलता है कि AppWidgetProvider
स्वीकार करता है
ACTION_APPWIDGET_UPDATE
ब्रॉडकास्ट. आपको सिर्फ़ यही ब्रॉडकास्ट के बारे में बताना होगा. कॉन्टेंट बनाने
AppWidgetManager
अन्य सभी विजेट ब्रॉडकास्ट, AppWidgetProvider
को इस तरह अपने-आप भेज दिए जाते हैं
ज़रूरी है.
<meta-data>
एलिमेंट, AppWidgetProviderInfo
रिसॉर्स और
इन एट्रिब्यूट की ज़रूरत होती है:
android:name
: मेटाडेटा का नाम बताता है. इस्तेमाल की जाने वाली चीज़ेंandroid.appwidget.provider
की मदद से,AppWidgetProviderInfo
डिस्क्रिप्टर.android:resource
:AppWidgetProviderInfo
संसाधन के बारे में बताता है स्थान.
AppWidgetProvider क्लास लागू करें
AppWidgetProvider
क्लास एक्सटेंड होती है
BroadcastReceiver
सुविधा क्लास का इस्तेमाल करें. इसे सिर्फ़ इवेंट की जानकारी मिलती है
ऐसे ब्रॉडकास्ट जो विजेट के हिसाब से काम के हैं. जैसे, विजेट को कब अपडेट किया जाता है,
मिटाया गया, चालू किया गया, और बंद किया गया. जब ये ब्रॉडकास्ट इवेंट होते हैं, तो ये
AppWidgetProvider
तरीकों का इस्तेमाल किया जाता है:
onUpdate()
- इसे विजेट को अपडेट करने के लिए,
AppWidgetProviderInfo
मेंupdatePeriodMillis
एट्रिब्यूट. टेबल इस पेज में के लिए अतिरिक्त विजेट की विशेषताओं के बारे में ज़्यादा जानकारी देखें. - यह तरीका तब भी कॉल किया जाता है, जब उपयोगकर्ता विजेट जोड़ता है, इसलिए यह
ज़रूरी सेटअप, जैसे कि इवेंट हैंडलर तय करना
View
ऑब्जेक्ट या डेटा लोड करने के लिए जॉब शुरू करना विजेट में दिखाई दे सकती है. हालांकि, अगर आपको बिना किसी शुल्क के कॉन्फ़िगरेशन गतिविधि का एलान करना है,configuration_optional
फ़्लैग, इस तरीके को तब कॉल नहीं किया जाता है, जब उपयोगकर्ता विजेट को जोड़ता है, लेकिन बाद में होने वाले अपडेट के लिए इसे कॉल किया जाता है. यह है पहला अपडेट करते समय कॉन्फ़िगरेशन गतिविधि की ज़िम्मेदारी कॉन्फ़िगरेशन पूरा हुआ. ज़्यादा जानकारी के लिए, उपयोगकर्ताओं को ऐप्लिकेशन विजेट कॉन्फ़िगर करने की अनुमति दें लेख पढ़ें. - सबसे ज़रूरी कॉलबैक
onUpdate()
है. देखें इवेंट मैनेज करने के लिए,onUpdate()
क्लास के बारे में ज़्यादा जानें. onAppWidgetOptionsChanged()
इसे तब कॉल किया जाता है, जब विजेट को पहली बार किसी जगह पर रखा गया हो और किसी भी समय यह आकार बदला गया. विजेट के साइज़ के आधार पर कॉन्टेंट दिखाने या छिपाने के लिए, इस कॉलबैक का इस्तेमाल करें रेंज. साइज़ की रेंज देखें—और Android 12 से, कॉल करके, विजेट के इंस्टेंस को मिल सकने वाले साइज़ की सूची
getAppWidgetOptions()
जोBundle
दिखाता है, जिसमें फ़ॉलो किया जा रहा है:OPTION_APPWIDGET_MIN_WIDTH
: किसी विजेट के इंस्टेंस की चौड़ाई की निचली सीमा, डीपी इकाइयों में होती है.OPTION_APPWIDGET_MIN_HEIGHT
: किसी विजेट के इंस्टेंस की ऊंचाई की निचली सीमा, डीपी इकाइयों में होती है.OPTION_APPWIDGET_MAX_WIDTH
: किसी विजेट के इंस्टेंस की चौड़ाई की ऊपरी सीमा, डीपी यूनिट में होती है.OPTION_APPWIDGET_MAX_HEIGHT
: किसी विजेट के इंस्टेंस की ऊंचाई की ऊपरी सीमा, डीपी इकाइयों में होती है.OPTION_APPWIDGET_SIZES
: संभावित साइज़ (List<SizeF>
) की सूची मौजूद है, जो कि dp यूनिट में है. विजेट इंस्टेंस ले सकता है. Android 12 में पेश किया गया.
onDeleted(Context, int[])
जब भी किसी विजेट को विजेट होस्ट से मिटाया जाता है, तब यह कॉल किया जाता है.
onEnabled(Context)
इसे तब कॉल किया जाता है, जब विजेट का इंस्टेंस पहली बार बनाया जाता है. उदाहरण के लिए, यदि उपयोगकर्ता आपके विजेट के दो इंस्टेंस जोड़ता है, तो इसे केवल पहली बार. अगर आपको कोई नया डेटाबेस खोलना या कोई दूसरा सेटअप करना हो, तो सभी विजेट इंस्टेंस के लिए सिर्फ़ एक बार होना चाहिए, तो यह ऐसी जगह है करते हैं.
onDisabled(Context)
यह तब कॉल किया जाता है जब आपके विजेट का अंतिम इंस्टेंस विजेट होस्ट. आप यहां
onEnabled(Context)
में किए गए सभी काम व्यवस्थित करते हैं, जैसे कि अस्थायी डेटाबेस को मिटाना.onReceive(Context, Intent)
यह हर ब्रॉडकास्ट के लिए और पिछले हर कॉलबैक से पहले कॉल किया जाता है तरीकों का इस्तेमाल करना होगा. आम तौर पर, आपको यह तरीका लागू करने की ज़रूरत नहीं होती, क्योंकि डिफ़ॉल्ट
AppWidgetProvider
लागू करने की सुविधा, विजेट के सभी ब्रॉडकास्ट को फ़िल्टर करती है पिछले तरीकों का इस्तेमाल करें.
आपको AppWidgetProvider
क्लास लागू करने के बारे में, ब्रॉडकास्ट के तौर पर एलान करना होगा
पाने वाला व्यक्ति, AndroidManifest
में <receiver>
एलिमेंट का इस्तेमाल कर रहा है. देखें एलान करें
विजेट के तौर पर साइन इन करें.
onUpdate() क्लास के साथ इवेंट मैनेज करना
सबसे ज़रूरी AppWidgetProvider
कॉलबैक onUpdate()
है, क्योंकि यह है
कॉल किया जाता है, जब तक कि कॉन्फ़िगरेशन का इस्तेमाल नहीं किया जाता, तब तक हर विजेट को होस्ट में जोड़ दिया जाता है
गतिविधि जिसमें configuration_optional
फ़्लैग शामिल नहीं है. अगर आपका विजेट
उपयोगकर्ता इंटरैक्शन इवेंट को फ़्लैग करने के बाद, इस कॉलबैक में इवेंट हैंडलर रजिस्टर करें. अगर आपने
आपका विजेट अस्थायी फ़ाइलें या डेटाबेस नहीं बनाता है और न ही कोई दूसरा काम करता है
जिसे हटाने की ज़रूरत है, तो शायद onUpdate()
ही कॉलबैक का तरीका हो
परिभाषित करने की ज़रूरत है.
उदाहरण के लिए, अगर आपको बटन वाला ऐसा विजेट चाहिए जो गतिविधि को लॉन्च करे, तो
टैप किया गया है, तो AppWidgetProvider
को लागू करने के इस तरीके का इस्तेमाल किया जा सकता है:
Kotlin
class ExampleAppWidgetProvider : AppWidgetProvider() { override fun onUpdate( context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray ) { // Perform this loop procedure for each widget that belongs to this // provider. appWidgetIds.forEach { appWidgetId -> // Create an Intent to launch ExampleActivity. val pendingIntent: PendingIntent = PendingIntent.getActivity( /* context = */ context, /* requestCode = */ 0, /* intent = */ Intent(context, ExampleActivity::class.java), /* flags = */ PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) // Get the layout for the widget and attach an onClick listener to // the button. val views: RemoteViews = RemoteViews( context.packageName, R.layout.appwidget_provider_layout ).apply { setOnClickPendingIntent(R.id.button, pendingIntent) } // Tell the AppWidgetManager to perform an update on the current // widget. appWidgetManager.updateAppWidget(appWidgetId, views) } } }
Java
public class ExampleAppWidgetProvider extends AppWidgetProvider { public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // Perform this loop procedure for each widget that belongs to this // provider. for (int i=0; i < appWidgetIds.length; i++) { int appWidgetId = appWidgetIds[i]; // Create an Intent to launch ExampleActivity Intent intent = new Intent(context, ExampleActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity( /* context = */ context, /* requestCode = */ 0, /* intent = */ intent, /* flags = */ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE ); // Get the layout for the widget and attach an onClick listener to // the button. RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget_layout); views.setOnClickPendingIntent(R.id.button, pendingIntent); // Tell the AppWidgetManager to perform an update on the current app // widget. appWidgetManager.updateAppWidget(appWidgetId, views); } } }
यह AppWidgetProvider
सिर्फ़ onUpdate()
तरीके के बारे में बताता है. इसके लिए, इसका इस्तेमाल किया जाता है
लॉन्च होने वाला PendingIntent
बनाएं
एक Activity
और उसे विजेट के
बटन setOnClickPendingIntent(int,
PendingIntent)
का उपयोग कर रहे हैं. इसमें एक लूप शामिल है, जो हर एंट्री के बाद फिर से आता है
appWidgetIds
में, जो आईडी का कलेक्शन होता है. इससे बनाए गए हर विजेट की पहचान की जाती है
यह कंपनी. अगर उपयोगकर्ता विजेट के एक से ज़्यादा इंस्टेंस बनाता है, तो
वे सभी एक साथ अपडेट होते हैं. हालांकि, updatePeriodMillis
का सिर्फ़ एक शेड्यूल
को विजेट के सभी इंस्टेंस के लिए मैनेज किया जाता है. उदाहरण के लिए, अगर अपडेट शेड्यूल
को हर दो घंटे में एक बार सेट किया जाता है और विजेट का दूसरा इंस्टेंस जोड़ा जाता है
पहले घंटे के एक घंटे बाद, फिर वे दोनों
अपडेट करने की अवधि को अनदेखा कर दिया जाता है. वे दोनों हर दो में अपडेट होते हैं
घंटे, हर घंटे नहीं.
ज़्यादा जानकारी के लिए,
ExampleAppWidgetProvider.java
सैंपल क्लास देखें.
विजेट ब्रॉडकास्ट के इंटेंट पाएं
AppWidgetProvider
एक सुविधा क्लास है. अगर आपको बैज पाना है
सीधे ब्रॉडकास्ट करता है, तो आप अपना खुद का BroadcastReceiver
लागू कर सकते हैं या खुद के ब्रॉडकास्ट को बदल सकते हैं
यह
onReceive(Context,Intent)
कॉलबैक. आपको जिन मकसदों पर ध्यान देने की ज़रूरत है वे ये हैं:
फ़ॉलो किया जा रहा है:
ACTION_APPWIDGET_UPDATE
ACTION_APPWIDGET_DELETED
ACTION_APPWIDGET_ENABLED
ACTION_APPWIDGET_DISABLED
ACTION_APPWIDGET_OPTIONS_CHANGED
विजेट का लेआउट बनाएं
आपको एक्सएमएल में अपने विजेट के लिए एक शुरुआती लेआउट तय करना होगा और इसे
प्रोजेक्ट की res/layout/
डायरेक्ट्री. डिज़ाइन देखें
दिशा-निर्देशों के बारे में ज़्यादा जानें.
अगर आपको पता है, तो विजेट का लेआउट बनाना आसान है
लेआउट. हालांकि, ध्यान रखें कि विजेट
लेआउट RemoteViews
पर आधारित हैं,
जो हर तरह के लेआउट या व्यू विजेट के साथ काम नहीं करता. कस्टम पैरामीटर का इस्तेमाल नहीं किया जा सकता
व्यू की ऐसी सब-क्लास और व्यू जो RemoteViews
में काम करते हैं.
RemoteViews
ViewStub
का भी समर्थन करता है,
यह एक दिखाई नहीं देने वाला, शून्य साइज़ का View
है. इसे लेआउट में लेज़ी तरीके से इनफ़्लेट किया जा सकता है
रनटाइम पर संसाधन इस्तेमाल करना चाहिए.
स्टेटफ़ुल व्यवहार के लिए सहायता
Android 12 में, स्टेटफ़ुल व्यवहार की सुविधा मिलती है. इसके लिए, इनका इस्तेमाल किया जाता है मौजूदा कॉम्पोनेंट:
विजेट अब भी स्टेटलेस है. आपके ऐप्लिकेशन को राज्य का नाम सेव करना होगा और राज्य में होने वाले बदलाव से जुड़े इवेंट.
नीचे दिया गया कोड उदाहरण इन कॉम्पोनेंट को लागू करने का तरीका दिखाता है.
Kotlin
// Check the view. remoteView.setCompoundButtonChecked(R.id.my_checkbox, true) // Check a radio group. remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2) // Listen for check changes. The intent has an extra with the key // EXTRA_CHECKED that specifies the current checked state of the view. remoteView.setOnCheckedChangeResponse( R.id.my_checkbox, RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent) )
Java
// Check the view. remoteView.setCompoundButtonChecked(R.id.my_checkbox, true); // Check a radio group. remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2); // Listen for check changes. The intent has an extra with the key // EXTRA_CHECKED that specifies the current checked state of the view. remoteView.setOnCheckedChangeResponse( R.id.my_checkbox, RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent));
दो लेआउट उपलब्ध कराएं: एक को टारगेट करने वाला डिवाइस, जो Android 12 पर चल रहा हो या
res/layout-v31
में उच्च और अन्य लक्ष्यीकरण पिछला
डिफ़ॉल्ट res/layout
फ़ोल्डर में, Android 11 या इससे पहले का वर्शन होना चाहिए.
किनारों को गोल करें
Android 12 में ये सिस्टम पैरामीटर मिलते हैं, जिनकी मदद से आपके विजेट के गोल किनारों का दायरा:
system_app_widget_background_radius
: विजेट के बैकग्राउंड के कोने की रेडियस, जो कभी भी इससे ज़्यादा नहीं होती 28 डीपी.system_app_widget_inner_radius
: विजेट के अंदर किसी भी व्यू के कोने की रेडियस. यह ठीक 8 डीपी है 8 dp का इस्तेमाल करते समय सही तरीके से अलाइन करने के लिए, बैकग्राउंड के रेडियस से कम होता है पैडिंग.
नीचे दिया गया उदाहरण एक ऐसा विजेट दिखाता है जो
विजेट के कोने के लिए system_app_widget_background_radius
और
विजेट के अंदर व्यू के लिए system_app_widget_inner_radius
.
1 विजेट का कोना.
2 विजेट के अंदर किसी व्यू का कोना.
गोलाकार कोनों के लिए ज़रूरी बातें
- तृतीय-पक्ष लॉन्चर और डिवाइस निर्माता
system_app_widget_background_radius
पैरामीटर का साइज़ 28 डीपी से कम होना चाहिए.system_app_widget_inner_radius
पैरामीटर हमेशा 8 डीपी से कम होता हैsystem_app_widget_background_radius
की वैल्यू डालें. - अगर आपका विजेट
@android:id/background
का इस्तेमाल नहीं करता या बैकग्राउंड को तय नहीं करता जो आउटलाइन के आधार पर अपने कॉन्टेंट को क्लिप करती है—android:clipToOutline
के साथtrue
पर सेट किया जाता है—लॉन्चर अपने-आप बैकग्राउंड की पहचान करता है और 16 dp तक के गोल किनारों वाले रेक्टैंगल का इस्तेमाल करके, विजेट को क्लिप करने की सुविधा मिलती है. देखें कि पक्का करें कि आपका विजेट इनके साथ काम करता हो Android 12.
हमारा सुझाव है कि Android के पिछले वर्शन के साथ विजेट की सुविधा को इस्तेमाल करने के लिए, कस्टम एट्रिब्यूट तय करना और उन्हें ओवरराइड करने के लिए कस्टम थीम इस्तेमाल करना Android 12, जैसा कि नीचे दिए गए सैंपल एक्सएमएल फ़ाइलों में दिखाया गया है:
/values/attrs.xml
<resources>
<attr name="backgroundRadius" format="dimension" />
</resources>
/values/styles.xml
<resources>
<style name="MyWidgetTheme">
<item name="backgroundRadius">@dimen/my_background_radius_dimen</item>
</style>
</resources>
/values-31/styles.xml
<resources>
<style name="MyWidgetTheme" parent="@android:style/Theme.DeviceDefault.DayNight">
<item name="backgroundRadius">@android:dimen/system_app_widget_background_radius</item>
</style>
</resources>
/drawable/my_widget_background.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="?attr/backgroundRadius" />
...
</shape>
/layout/my_widget_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
android:background="@drawable/my_widget_background" />