ऐप्लिकेशन विजेट को कॉन्फ़िगर किया जा सकता है. उदाहरण के लिए, घड़ी का विजेट, उपयोगकर्ताओं को यह कॉन्फ़िगर करने की अनुमति दे सकता है कि कौनसी टाइम ज़ोन दिखानी है.
अगर आपको उपयोगकर्ताओं को अपने विजेट की सेटिंग कॉन्फ़िगर करने की अनुमति देनी है, तो विजेट
कॉन्फ़िगरेशन Activity बनाएं. यह गतिविधि, ऐप्लिकेशन विजेट होस्ट से अपने-आप लॉन्च होती है. यह गतिविधि, विजेट बनाने के दौरान या बाद में लॉन्च हो सकती है. यह इस बात पर निर्भर करता है कि आपने कॉन्फ़िगरेशन के कौनसे विकल्प तय किए हैं.
कॉन्फ़िगरेशन गतिविधि की जानकारी देना
Android मेनिफ़ेस्ट फ़ाइल में, कॉन्फ़िगरेशन गतिविधि की जानकारी सामान्य गतिविधि के तौर पर दें. ऐप्लिकेशन विजेट होस्ट, इसे
ACTION_APPWIDGET_CONFIGURE
कार्रवाई के साथ लॉन्च करता है. इसलिए, गतिविधि को इस इंटेंट को स्वीकार करना होगा. उदाहरण के लिए:
<activity android:name=".ExampleAppWidgetConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
</intent-filter>
</activity>
AppWidgetProviderInfo.xml फ़ाइल में, android:configure एट्रिब्यूट के साथ गतिविधि की जानकारी दें. इस फ़ाइल की जानकारी देने के बारे में ज़्यादा जानें
. कॉन्फ़िगरेशन गतिविधि की जानकारी देने का तरीका यहां दिया गया है:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.example.android.ExampleAppWidgetConfigurationActivity"
... >
</appwidget-provider>
गतिविधि की जानकारी, पूरी तरह से क्वालिफ़ाइड नेमस्पेस के साथ दी जाती है, क्योंकि लॉन्चर, आपके पैकेज स्कोप से बाहर से इसे रेफ़र करता है.
कॉन्फ़िगरेशन गतिविधि शुरू करने के लिए, आपको बस इतना करना होगा. इसके बाद, आपको असल गतिविधि लागू करनी होगी.
कॉन्फ़िगरेशन गतिविधि लागू करना
गतिविधि लागू करते समय, इन दो अहम बातों का ध्यान रखें:
- ऐप्लिकेशन विजेट होस्ट, कॉन्फ़िगरेशन गतिविधि को कॉल करता है. साथ ही, कॉन्फ़िगरेशन गतिविधि को हमेशा कोई नतीजा दिखाना चाहिए. नतीजे में, ऐप्लिकेशन विजेट
आईडी शामिल होना चाहिए. यह आईडी, गतिविधि को लॉन्च करने वाले इंटेंट से पास किया जाता है. इसे इंटेंट
एक्स्ट्रा में
EXTRA_APPWIDGET_IDके तौर पर सेव किया जाता है. - कॉन्फ़िगरेशन गतिविधि लॉन्च होने पर, सिस्टम
ACTION_APPWIDGET_UPDATEब्रॉडकास्ट नहीं भेजता. इसका मतलब है कि विजेट बनाने पर, यहonUpdate()तरीके को कॉल नहीं करता. पहली बार विजेट बनाते समय,AppWidgetManagerसे अपडेट का अनुरोध करना, कॉन्फ़िगरेशन गतिविधि की ज़िम्मेदारी होती है. हालांकि, इसके बाद के अपडेट के लिएonUpdate()को कॉल किया जाता है. इसे सिर्फ़ पहली बार स्किप किया जाता है.
कॉन्फ़िगरेशन से नतीजा दिखाने और विजेट को अपडेट करने के तरीके का उदाहरण देखने के लिए, अगले सेक्शन में दिए गए कोड स्निपेट देखें.
कॉन्फ़िगरेशन गतिविधि से विजेट को अपडेट करना
जब कोई विजेट, कॉन्फ़िगरेशन गतिविधि का इस्तेमाल करता है, तो कॉन्फ़िगरेशन पूरा होने पर विजेट को अपडेट करना, गतिविधि की ज़िम्मेदारी होती है. इसके लिए,
से सीधे अपडेट का अनुरोध किया जा सकता है
AppWidgetManager.
विजेट को सही तरीके से अपडेट करने और कॉन्फ़िगरेशन गतिविधि को बंद करने के तरीके की खास जानकारी यहां दी गई है:
गतिविधि को लॉन्च करने वाले इंटेंट से, ऐप्लिकेशन विजेट आईडी पाएं:
Kotlin
val appWidgetId = intent?.extras?.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID ) ?: AppWidgetManager.INVALID_APPWIDGET_ID
Java
Intent intent = getIntent(); Bundle extras = intent.getExtras(); int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; if (extras != null) { appWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); }
गतिविधि के नतीजे को
RESULT_CANCELEDपर सेट करें.इससे, अगर उपयोगकर्ता गतिविधि के आखिर तक पहुंचने से पहले ही वापस चला जाता है, तो सिस्टम, ऐप्लिकेशन विजेट होस्ट को सूचना देता है कि कॉन्फ़िगरेशन रद्द कर दिया गया है. साथ ही, होस्ट, विजेट को नहीं जोड़ता:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_CANCELED, resultValue)
Java
int resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(Activity.RESULT_CANCELED, resultValue);
उपयोगकर्ता की प्राथमिकताओं के मुताबिक, विजेट को कॉन्फ़िगर करें.
कॉन्फ़िगरेशन पूरा होने पर,
AppWidgetManagerको कॉल करकेgetInstance(Context)का इंस्टेंस पाएं:Kotlin
val appWidgetManager = AppWidgetManager.getInstance(context)
Java
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
updateAppWidget(int,RemoteViews)को कॉल करके,RemoteViewsलेआउट से विजेट को अपडेट करें:Kotlin
val views = RemoteViews(context.packageName, R.layout.example_appwidget) appWidgetManager.updateAppWidget(appWidgetId, views)
Java
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget); appWidgetManager.updateAppWidget(appWidgetId, views);
वापसी का इंटेंट बनाएं, इसे गतिविधि के नतीजे के साथ सेट करें, और गतिविधि खत्म करें:
Kotlin
val resultValue = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId) setResult(Activity.RESULT_OK, resultValue) finish()
Java
Intent resultValue = new Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(RESULT_OK, resultValue); finish();
उदाहरण के लिए, GitHub पर
ListWidgetConfigureActivity.kt
सैंपल क्लास देखें.
विजेट कॉन्फ़िगर करने के विकल्प
डिफ़ॉल्ट रूप से, ऐप्लिकेशन विजेट होस्ट, कॉन्फ़िगरेशन गतिविधि को सिर्फ़ एक बार लॉन्च करता है. यह गतिविधि, उपयोगकर्ता के होम स्क्रीन पर विजेट जोड़ने के तुरंत बाद लॉन्च होती है. हालांकि, ऐसे विकल्प तय किए जा सकते हैं जिनसे उपयोगकर्ताओं को मौजूदा विजेट को फिर से कॉन्फ़िगर करने या डिफ़ॉल्ट विजेट कॉन्फ़िगरेशन देकर, विजेट के शुरुआती कॉन्फ़िगरेशन को स्किप करने की अनुमति मिलती है.
उपयोगकर्ताओं को जोड़े गए विजेट को फिर से कॉन्फ़िगर करने की अनुमति देना
उपयोगकर्ताओं को मौजूदा विजेट को फिर से कॉन्फ़िगर करने की अनुमति देने के लिए, reconfigurable
फ़्लैग को
widgetFeatures
के एट्रिब्यूट में तय करें appwidget-provider. ज़्यादा जानकारी के लिए, फ़ाइल
की जानकारी देने से जुड़ा लेखAppWidgetProviderInfo.xml देखें. उदाहरण के लिए:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable">
</appwidget-provider>
उपयोगकर्ता, विजेट को दबाकर और होल्ड करके, फिर फिर से कॉन्फ़िगर करें बटन पर टैप करके, उसे फिर से कॉन्फ़िगर कर सकते हैं. इस बटन को 1 से लेबल किया गया है पहली इमेज में.
विजेट के डिफ़ॉल्ट कॉन्फ़िगरेशन का इस्तेमाल करना
उपयोगकर्ताओं को शुरुआती कॉन्फ़िगरेशन का चरण स्किप करने की अनुमति देकर, विजेट का बेहतर अनुभव दिया जा सकता है. इसके लिए, widgetFeatures फ़ील्ड में
configuration_optional
और reconfigurable , दोनों फ़्लैग तय करें. इससे, उपयोगकर्ता के विजेट जोड़ने के बाद, कॉन्फ़िगरेशन गतिविधि लॉन्च नहीं होती. जैसा कि पहले बताया गया है, उपयोगकर्ता बाद में भी विजेट को फिर से कॉन्फ़िगर कर सकता है. उदाहरण के लिए, घड़ी का विजेट, शुरुआती कॉन्फ़िगरेशन को स्किप कर सकता है और डिफ़ॉल्ट रूप से डिवाइस की टाइम ज़ोन दिखा सकता है.
यहां एक उदाहरण दिया गया है, जिसमें बताया गया है कि कॉन्फ़िगरेशन गतिविधि को फिर से कॉन्फ़िगर करने और वैकल्पिक के तौर पर कैसे मार्क किया जाता है:
<appwidget-provider
android:configure="com.myapp.ExampleAppWidgetConfigurationActivity"
android:widgetFeatures="reconfigurable|configuration_optional">
</appwidget-provider>