<सेवा>

सिंटैक्स:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["camera" | "connectedDevice" |
                                        "dataSync" | "health" | "location" |
                                        "mediaPlayback" | "mediaProjection" |
                                        "microphone" | "phoneCall" |
                                        "remoteMessaging" | "shortService" |
                                        "specialUse" | "systemExempted"]
         android:icon="drawable resource"
         android:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"]
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string"
         android:stopWithTask=["true" | "false"]>
    ...
</service>
इसमें शामिल:
<application>
इसमें ये एलिमेंट शामिल हो सकते हैं:
<intent-filter>
<meta-data>
<property>
विवरण:
यह एलिमेंट, Service की सबक्लास वाली किसी सेवा को, ऐप्लिकेशन के कॉम्पोनेंट के तौर पर दिखाता है. ऐक्टिविटी के उलट, सेवाओं में विज़ुअल यूज़र इंटरफ़ेस नहीं होता. इनका इस्तेमाल, बैकग्राउंड में लंबे समय तक चलने वाली कार्रवाइयों या ऐसे रिच कम्यूनिकेशन एपीआई को लागू करने के लिए किया जाता है जिन्हें दूसरे ऐप्लिकेशन कॉल कर सकते हैं.

सभी सेवाओं को, मेनिफ़ेस्ट फ़ाइल में <service> एलिमेंट के ज़रिए दिखाया जाना चाहिए. जिन सेवाओं को मेनिफ़ेस्ट फ़ाइल में नहीं दिखाया जाता उन्हें सिस्टम नहीं पहचानता और वे कभी नहीं चलतीं.

ध्यान दें: Android 8.0 (एपीआई लेवल 26) और उसके बाद के वर्शन पर, सिस्टम इस बात पर पाबंदी लगाता है कि आपका ऐप्लिकेशन बैकग्राउंड में चलने के दौरान क्या-क्या कर सकता है. ज़्यादा जानकारी के लिए, बैकग्राउंड में ऐक्ज़िक्यूशन की सीमाओं और बैकग्राउंड में जगह की जानकारी की सीमाओं के बारे में बताने वाली गाइड देखें.

एट्रिब्यूट:
android:description
यह स्ट्रिंग, सेवा के बारे में ऐसी जानकारी देती है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. इस स्ट्रिंग को, स्ट्रिंग रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है, ताकि इसे यूज़र इंटरफ़ेस में मौजूद अन्य स्ट्रिंग की तरह स्थानीय भाषा में बदला जा सके.
android:directBootAware

यह एट्रिब्यूट बताता है कि सेवा डायरेक्ट-बूट अवेयर है या नहीं. इसका मतलब है कि यह सेवा, उपयोगकर्ता के डिवाइस अनलॉक करने से पहले चल सकती है या नहीं.

ध्यान दें: डायरेक्ट बूटके दौरान, आपके ऐप्लिकेशन में मौजूद कोई सेवा सिर्फ़ डिवाइस से सुरक्षित स्टोरेज में सेव किए गए डेटा को ऐक्सेस कर सकती है.

डिफ़ॉल्ट वैल्यू "false" होती है.

android:enabled
यह एट्रिब्यूट बताता है कि सिस्टम, सेवा को इंस्टैंशिएट कर सकता है या नहीं. अगर सिस्टम, सेवा को इंस्टैंशिएट कर सकता है, तो इसकी वैल्यू "true" होती है. अगर नहीं, तो "false" होती है. डिफ़ॉल्ट वैल्यू "true" होती है.

The <application> एलिमेंट में अपना enabled एट्रिब्यूट होता है. यह एट्रिब्यूट, सेवाओं के साथ-साथ ऐप्लिकेशन के सभी कॉम्पोनेंट पर लागू होता है. सेवा को चालू करने के लिए, <application> और <service> दोनों एट्रिब्यूट की वैल्यू "true" होनी चाहिए. डिफ़ॉल्ट तौर पर, इन दोनों एट्रिब्यूट की वैल्यू होती है. अगर इनमें से किसी भी एट्रिब्यूट की वैल्यू "false" है, तो सेवा बंद हो जाती है और उसे इंस्टैंशिएट नहीं किया जा सकता.

android:exported
यह एट्रिब्यूट बताता है कि अन्य ऐप्लिकेशन के कॉम्पोनेंट, सेवा को शुरू कर सकते हैं या उससे इंटरैक्ट कर सकते हैं या नहीं. अगर वे ऐसा कर सकते हैं, तो इसकी वैल्यू "true" होती है. अगर नहीं, तो "false" होती है. जब वैल्यू "false" होती है, तब सिर्फ़ एक ही ऐप्लिकेशन के कॉम्पोनेंट या एक ही यूज़र आईडी वाले ऐप्लिकेशन, सेवा को शुरू कर सकते हैं या उससे बाइंड हो सकते हैं.

डिफ़ॉल्ट वैल्यू इस बात पर निर्भर करती है कि सेवा में इंटेंट फ़िल्टर शामिल हैं या नहीं. अगर कोई फ़िल्टर मौजूद नहीं है, तो सेवा को सिर्फ़ उसकी क्लास का सटीक नाम तय करके शुरू किया जा सकता है. इसका मतलब है कि सेवा का इस्तेमाल सिर्फ़ ऐप्लिकेशन के अंदर किया जा सकता है, क्योंकि अन्य ऐप्लिकेशन को क्लास के नाम के बारे में जानकारी नहीं होती. इसलिए, इस मामले में डिफ़ॉल्ट वैल्यू "false" होती है. वहीं, अगर कम से कम एक फ़िल्टर मौजूद है, तो इसका मतलब है कि सेवा का इस्तेमाल बाहर भी किया जा सकता है. इसलिए, डिफ़ॉल्ट वैल्यू "true" होती है.

यह एट्रिब्यूट, किसी सेवा को अन्य ऐप्लिकेशन के लिए उपलब्ध होने से रोकने का इकलौता तरीका नहीं है. सेवा से इंटरैक्ट करने वाली बाहरी इकाइयों को सीमित करने के लिए, अनुमति का इस्तेमाल भी किया जा सकता है. permission एट्रिब्यूट देखें.

android:foregroundServiceType

यह एट्रिब्यूट बताता है कि सेवा, फ़ोरग्राउंड सेवा है और यह इस्तेमाल के किसी खास मामले की ज़रूरी शर्तें पूरी करती है. उदाहरण के लिए, फ़ोरग्राउंड सेवा का टाइप "location" यह बताता है कि कोई ऐप्लिकेशन, डिवाइस की मौजूदा जगह की जानकारी पा रहा है. आम तौर पर, ऐसा डिवाइस की जगह की जानकारी से जुड़ी उपयोगकर्ता की शुरू की गई कार्रवाई को जारी रखने के लिए किया जाता है.

किसी सेवा को, फ़ोरग्राउंड सेवा के एक से ज़्यादा टाइप असाइन किए जा सकते हैं.

android:icon

यह एट्रिब्यूट, सेवा को दिखाने वाले आइकॉन के बारे में बताता है. इस एट्रिब्यूट को, ड्रॉएबल रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है. इसमें इमेज की परिभाषा शामिल होती है. अगर इसे सेट नहीं किया जाता है, तो इसके बजाय पूरे ऐप्लिकेशन के लिए तय किया गया आइकॉन इस्तेमाल किया जाता है. <application> एलिमेंट का icon एट्रिब्यूट देखें.

सेवा का आइकॉन, चाहे इसे यहां सेट किया गया हो या <application> एलिमेंट से, सेवा के सभी इंटेंट फ़िल्टर के लिए डिफ़ॉल्ट आइकॉन भी होता है. <intent-filter> एलिमेंट का icon एट्रिब्यूट देखें.

android:intentMatchingFlags

इस एट्रिब्यूट का इस्तेमाल करके, यह तय किया जा सकता है कि सिस्टम, आने वाले इंटेंट को ऐप्लिकेशन के कॉम्पोनेंट से कैसे मैच करता है. डिफ़ॉल्ट तौर पर, मैचिंग के लिए कोई खास नियम लागू नहीं किए जाते.

किसी <service> टैग पर सेट की गई वैल्यू, <application> टैग पर सेट की गई वैल्यू को बदल देती है.

वैल्यू, इनमें से एक या एक से ज़्यादा फ़्लैग होनी चाहिए. इन्हें '|' से अलग किया जाता है:

फ़्लैग ब्यौरा
none आने वाले इंटेंट के लिए, मैचिंग के सभी खास नियमों को बंद कर देता है. एक से ज़्यादा फ़्लैग तय करते समय, टकराव वाली वैल्यू को none फ़्लैग को प्राथमिकता देकर हल किया जाता है.
enforceIntentFilter

आने वाले इंटेंट के लिए, मैचिंग के सख्त नियम लागू करता है:

  • एक्सप्लिसिट इंटेंट, टारगेट कॉम्पोनेंट के इंटेंट फ़िल्टर से मैच होने चाहिए.
  • ऐक्शन के बिना वाले इंटेंट, किसी भी इंटेंट फ़िल्टर से मैच नहीं होते.
allowNullAction

मैचिंग के नियमों में ढील देता है, ताकि ऐक्शन के बिना वाले इंटेंट मैच हो सकें. इस फ़्लैग का इस्तेमाल, enforceIntentFilter के साथ मिलकर किया जाता है, ताकि यह पक्का किया जा सके कि ये नियम लागू हों:

  • एक्सप्लिसिट इंटेंट, टारगेट कॉम्पोनेंट के इंटेंट फ़िल्टर से मैच होने चाहिए.
  • ऐक्शन के बिना वाले इंटेंट, किसी भी इंटेंट फ़िल्टर से मैच हो सकते हैं.

ज़्यादा जानकारी के लिए, Android 16 (एपीआई लेवल 36) के व्यवहार में हुए बदलावों में, सुरक्षित इंटेंट सेक्शन देखें.

android:isolatedProcess
अगर इसे "true" पर सेट किया जाता है, तो यह सेवा एक खास प्रोसेस के तहत चलती है. यह प्रोसेस, सिस्टम के बाकी हिस्सों से अलग होती है और इसके पास अपनी कोई अनुमति नहीं होती. इसके साथ सिर्फ़ सर्विस एपीआई के ज़रिए कम्यूनिकेट किया जा सकता है. इसमें बाइंडिंग और शुरू करना शामिल है.
android:label
यह स्ट्रिंग, सेवा के लिए ऐसा नाम तय करती है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. अगर इस एट्रिब्यूट को सेट नहीं किया जाता है, तो इसके बजाय पूरे ऐप्लिकेशन के लिए सेट किया गया लेबल इस्तेमाल किया जाता है. <application> एलिमेंट का label एट्रिब्यूट देखें.

सेवा का लेबल, चाहे इसे यहां सेट किया गया हो या <application> एलिमेंट से, सेवा के सभी इंटेंट फ़िल्टर के लिए डिफ़ॉल्ट लेबल भी होता है. <intent-filter> एलिमेंट का label एट्रिब्यूट देखें.

इस स्ट्रिंग को, स्ट्रिंग रिसॉर्स के रेफ़रंस के तौर पर सेट किया जाता है, ताकि इसे यूज़र इंटरफ़ेस में मौजूद अन्य स्ट्रिंग की तरह स्थानीय भाषा में बदला जा सके. हालांकि, ऐप्लिकेशन डेवलप करते समय, इसे रॉ स्ट्रिंग के तौर पर भी सेट किया जा सकता है.

android:name
यह एट्रिब्यूट, Service की उस सबक्लास के नाम के बारे में बताता है जो सेवा को लागू करती है. यह पूरी तरह क्वालिफ़ाइड क्लास का नाम होता है. जैसे, "com.example.project.RoomService". हालांकि, शॉर्टहैंड के तौर पर, अगर नाम का पहला वर्ण पीरियड है, जैसे कि ".RoomService", तो इसे पैकेज के नाम में जोड़ा जाता है, जैसा कि <manifest> एलिमेंट में तय किया गया है.

ऐप्लिकेशन पब्लिश करने के बाद, इस नाम को न बदलें. हालांकि, अगर आपने android:exported="false" सेट किया है, तो नाम बदला जा सकता है.

इसके लिए कोई डिफ़ॉल्ट वैल्यू नहीं होती. नाम तय करना ज़रूरी है.

android:permission
यह एट्रिब्यूट, उस अनुमति के नाम के बारे में बताता है जो किसी इकाई को सेवा शुरू करने या उससे बाइंड होने के लिए चाहिए. अगर startService(), bindService(), या stopService() को कॉल करने वाले व्यक्ति को यह अनुमति नहीं दी जाती है, तो यह तरीका काम नहीं करता और Intent ऑब्जेक्ट, सेवा को नहीं भेजा जाता.

अगर इस एट्रिब्यूट को सेट नहीं किया जाता है, तो सेवा पर <application> एलिमेंट के permission एट्रिब्यूट से सेट की गई अनुमति लागू होती है. अगर दोनों एट्रिब्यूट सेट नहीं किए जाते हैं, तो सेवा को किसी अनुमति से सुरक्षित नहीं किया जाता.

अनुमतियों के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन मेनिफ़ेस्ट की खास जानकारी में अनुमतियां सेक्शन और सुरक्षा से जुड़ी गाइडलाइन देखें.

android:process
यह एट्रिब्यूट, उस प्रोसेस के नाम के बारे में बताता है जिसमें सेवा चलती है. आम तौर पर, किसी ऐप्लिकेशन के सभी कॉम्पोनेंट, ऐप्लिकेशन के लिए बनाई गई डिफ़ॉल्ट प्रोसेस में चलते हैं. इसका नाम, ऐप्लिकेशन के पैकेज के नाम जैसा ही होता है. The <application> एलिमेंट का process एट्रिब्यूट, सभी कॉम्पोनेंट के लिए अलग डिफ़ॉल्ट सेट कर सकता है. हालांकि, कोई कॉम्पोनेंट अपने process एट्रिब्यूट से डिफ़ॉल्ट को बदल सकता है. इससे आपके ऐप्लिकेशन को एक से ज़्यादा प्रोसेस में फैलाया जा सकता है.

अगर इस एट्रिब्यूट को असाइन किया गया नाम, कॉलन (:) से शुरू होता है, तो ज़रूरत पड़ने पर ऐप्लिकेशन के लिए एक नई निजी प्रोसेस बनाई जाती है और सेवा उस प्रोसेस में चलती है.

अगर प्रोसेस का नाम, छोटे अक्षर से शुरू होता है, तो सेवा उस नाम की ग्लोबल प्रोसेस में चलती है. हालांकि, इसके लिए सेवा के पास अनुमति होनी चाहिए. इससे अलग-अलग ऐप्लिकेशन के कॉम्पोनेंट, एक प्रोसेस शेयर कर सकते हैं. इससे रिसॉर्स का इस्तेमाल कम होता है.

android:stopWithTask
अगर इसे "true" पर सेट किया जाता है, तो उपयोगकर्ता के, ऐप्लिकेशन की किसी ऐक्टिविटी से जुड़ी टास्क को हटाने पर, सिस्टम अपने-आप सेवा को बंद कर देता है. डिफ़ॉल्ट वैल्यू "false" होती है.
यह भी देखें:
<application>
<activity>
पहली बार इसमें दिखाया गया:
एपीआई लेवल 1