<सेवा>

सिंटैक्स:
<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: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> element has its own enabled attribute that applies to all application components, including services. सेवा को चालू करने के लिए, <application> और <service> दोनों एट्रिब्यूट की वैल्यू "true" होनी चाहिए. डिफ़ॉल्ट तौर पर, इन दोनों एट्रिब्यूट की वैल्यू होती है. अगर इनमें से किसी भी एट्रिब्यूट की वैल्यू "false" है, तो सेवा बंद हो जाती है और उसे इंस्टैंशिएट नहीं किया जा सकता.

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

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

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

android:foregroundServiceType

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

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

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

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

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