Android 10 में <service> एलिमेंट में android:foregroundServiceType एट्रिब्यूट को जोड़ा गया है. इससे, डेवलपर को उपयोगकर्ताओं के लिए फ़ोरग्राउंड सेवाओं को बेहतर तरीके से तय करने में मदद मिलती है.
अगर आपका ऐप्लिकेशन Android 14 को टारगेट करता है, तो उसमें फ़ोरग्राउंड सेवा के सही टाइप बताने चाहिए. Android के पिछले वर्शन की तरह, कई तरह के टाइप को जोड़ा जा सकता है. इस सूची में, फ़ोरग्राउंड सेवा के टाइप दिखाए गए हैं, जिनमें से किसी एक को चुना जा सकता है:
cameraconnectedDevicedataSynchealthlocationmediaPlaybackmediaProjectionmicrophonephoneCallremoteMessagingshortServicespecialUsesystemExempted
अगर आपके ऐप्लिकेशन में इस्तेमाल का कोई उदाहरण इनमें से किसी भी तरह से जुड़ा हुआ नहीं है, तो हमारा सुझाव है कि आप WorkManager या उपयोगकर्ता की ओर से शुरू किए गए डेटा ट्रांसफ़र जॉब का इस्तेमाल करने के लिए, अपने लॉजिक को माइग्रेट करें.
health, remoteMessaging, shortService, specialUse और systemExempted के टाइप, Android 14 में नए हैं.
नीचे दिया गया कोड स्निपेट, मेनिफ़ेस्ट में फ़ोरग्राउंड सेवा के टाइप के एलान का उदाहरण देता है:
<manifest ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<application ...>
<service
android:name=".MyMediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="false">
</service>
</application>
</manifest>
अगर Android 14 को टारगेट करने वाला कोई ऐप्लिकेशन, मेनिफ़ेस्ट में किसी सेवा के टाइप की जानकारी नहीं देता है, तो उस सेवा के लिए startForeground() को कॉल करने पर, सिस्टम MissingForegroundServiceTypeException को दिखाएगा.
फ़ोरग्राउंड सेवा के टाइप इस्तेमाल करने के लिए, नई अनुमतियों का एलान करें
अगर Android 14 को टारगेट करने वाले ऐप्लिकेशन, फ़ोरग्राउंड सेवा का इस्तेमाल करते हैं, तो उन्हें फ़ोरग्राउंड सेवा के उस टाइप के आधार पर, एक खास अनुमति का एलान करना होगा जिसे Android 14 में शामिल किया गया है. ये अनुमतियां, इस पेज पर फ़ोरग्राउंड सेवा के हर टाइप के लिए, इस्तेमाल के उदाहरण और नीति उल्लंघन ठीक करने के तरीके सेक्शन में, "ऐसी अनुमति जिसे आपको अपनी मेनिफ़ेस्ट फ़ाइल में एलान करना होगा" लेबल वाले सेक्शन में दिखती हैं.
सभी अनुमतियों को सामान्य अनुमतियां कहा जाता है और इन्हें डिफ़ॉल्ट रूप से मंज़ूरी मिल जाती है. उपयोगकर्ता इन अनुमतियों को रद्द नहीं कर सकते.
रनटाइम के दौरान फ़ोरग्राउंड सेवा का टाइप शामिल करना
फ़ोरग्राउंड सेवाएं शुरू करने वाले ऐप्लिकेशन के लिए सबसे सही तरीका यह है कि वे startForeground() के ServiceCompat वर्शन का इस्तेमाल करें. यह वर्शन, androidx-core 1.12 और उसके बाद के वर्शन में उपलब्ध है. इसमें, फ़ोरग्राउंड सेवा के टाइप के बिटवाइज़ इंटिजर को पास किया जाता है. एक या उससे ज़्यादा टाइप की वैल्यू पास की जा सकती हैं.
आम तौर पर, आपको सिर्फ़ उन टाइप का एलान करना चाहिए जो किसी खास इस्तेमाल के उदाहरण के लिए ज़रूरी हैं. इससे, हर फ़ोरग्राउंड सेवा टाइप के लिए, सिस्टम की उम्मीदों को पूरा करना आसान हो जाता है. अगर फ़ोरग्राउंड सेवा को एक से ज़्यादा टाइप के साथ शुरू किया जाता है, तो फ़ोरग्राउंड सेवा को सभी टाइप के प्लैटफ़ॉर्म एनफ़ोर्समेंट की ज़रूरी शर्तों का पालन करना होगा.
ServiceCompat.startForeground(0, notification, FOREGROUND_SERVICE_TYPE_LOCATION)
अगर कॉल में फ़ोरग्राउंड सेवा का टाइप नहीं बताया गया है, तो टाइप डिफ़ॉल्ट रूप से, मेनिफ़ेस्ट में बताई गई वैल्यू पर सेट हो जाता है. अगर आपने मेनिफ़ेस्ट में सेवा के टाइप की जानकारी नहीं दी है, तो सिस्टम MissingForegroundServiceTypeException दिखाता है.
अगर फ़ोरग्राउंड सेवा को लॉन्च करने के बाद, नई अनुमतियों की ज़रूरत पड़ती है, तो आपको startForeground() को फिर से कॉल करके, सेवा के नए टाइप जोड़ने चाहिए. उदाहरण के लिए, मान लें कि कोई फ़िटनेस ऐप्लिकेशन, रनिंग ट्रैकर सेवा चलाता है. इस सेवा को हमेशा location की जानकारी की ज़रूरत होती है, लेकिन हो सकता है कि उसे media की अनुमतियों की ज़रूरत हो या न हो. आपको मेनिफ़ेस्ट में, location और mediaPlayback, दोनों के बारे में एलान करना होगा. अगर कोई उपयोगकर्ता दौड़ना शुरू करता है और चाहता है कि उसकी जगह की जानकारी ट्रैक की जाए, तो आपके ऐप्लिकेशन को startForeground() को कॉल करना चाहिए और सिर्फ़ location सेवा टाइप को पास करना चाहिए. इसके बाद, अगर उपयोगकर्ता को ऑडियो चलाना है, तो startForeground() को फिर से कॉल करें और location|mediaPlayback को पास करें.
सिस्टम के रनटाइम की जांच
सिस्टम, फ़ोरग्राउंड सेवा के टाइप के सही इस्तेमाल की जांच करता है. साथ ही, यह पुष्टि करता है कि ऐप्लिकेशन ने सही रनटाइम अनुमतियों का अनुरोध किया है या ज़रूरी एपीआई का इस्तेमाल किया है.
उदाहरण के लिए, सिस्टम को उम्मीद है कि फ़ोरग्राउंड सेवा के टाइप के तौर पर FOREGROUND_SERVICE_TYPE_LOCATION का इस्तेमाल करने वाले ऐप्लिकेशन, ACCESS_COARSE_LOCATION या ACCESS_FINE_LOCATION में से किसी एक का अनुरोध करेंगे.
इसका मतलब है कि उपयोगकर्ता से अनुमतियों का अनुरोध करते समय और फ़ोरग्राउंड सेवाएं शुरू करते समय, ऐप्लिकेशन को एक खास क्रम का पालन करना होगा. ऐप्लिकेशन के startForeground() को कॉल करने से पहले, अनुमतियों का अनुरोध किया जाना चाहिए और उन्हें मंज़ूरी दी जानी चाहिए. जिन ऐप्लिकेशन को फ़ोरग्राउंड सेवा शुरू होने के बाद, ज़रूरी अनुमतियों का अनुरोध करना है उन्हें ऑपरेशन के इस क्रम में बदलाव करना होगा. साथ ही, फ़ोरग्राउंड सेवा शुरू करने से पहले, अनुमति का अनुरोध करना होगा.
इस पेज पर, फ़ोरग्राउंड सेवा के हर टाइप के लिए, इस्तेमाल के उदाहरण और नीति उल्लंघन ठीक करने के तरीके सेक्शन में, "रनटाइम की ज़रूरी शर्तें" लेबल वाले सेक्शन में, प्लैटफ़ॉर्म पर नीति उल्लंघन ठीक करने के तरीके के बारे में जानकारी दी गई है.
फ़ोरग्राउंड सेवा के हर टाइप के लिए, इस्तेमाल के बताए गए उदाहरण और नीति उल्लंघन ठीक करने का तरीका (एनफ़ोर्समेंट)
किसी फ़ोरग्राउंड सेवा के टाइप का इस्तेमाल करने के लिए, आपको अपनी मेनिफ़ेस्ट फ़ाइल में किसी खास अनुमति के बारे में बताना होगा. साथ ही, आपको रनटाइम की कुछ खास ज़रूरी शर्तों को पूरा करना होगा. इसके अलावा, आपके ऐप्लिकेशन को उस टाइप के लिए, इस्तेमाल के उदाहरणों के किसी एक सेट की ज़रूरी शर्तों को पूरा करना होगा. यहां दिए गए सेक्शन में, उस अनुमति के बारे में बताया गया है जिसे आपको ज़ाहिर करना होगा. साथ ही, रनटाइम से जुड़ी ज़रूरी शर्तों और हर तरह की अनुमति के इस्तेमाल के उदाहरणों के बारे में भी बताया गया है.
कैमरा
android:foregroundServiceTypeमें मेनिफ़ेस्ट में बताने के लिए, फ़ोरग्राउंड सेवा का टाइपcamera- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_CAMERAstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CAMERA- रनटाइम की ज़रूरी शर्तें
CAMERAरनटाइम की अनुमति का अनुरोध करना और उसे पानाध्यान दें:
CAMERAरनटाइम की अनुमति, इस्तेमाल के दौरान लागू होने वाली पाबंदियों के दायरे में आती है. इस वजह से, जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तबcameraफ़ोरग्राउंड सेवा नहीं बनाई जा सकती. हालांकि, कुछ अपवादों के लिए ऐसा किया जा सकता है. ज़्यादा जानकारी के लिए, ऐसी फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियां जिनके लिए इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है देखें.- ब्यौरा
इसका इस्तेमाल करके, बैकग्राउंड में कैमरे को ऐक्सेस करना जारी रखा जा सकता है. जैसे, ऐसे वीडियो चैट ऐप्लिकेशन जो मल्टीटास्किंग (एक साथ कई काम करना) की सुविधा देते हैं.
कनेक्ट किया गया डिवाइस
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypeconnectedDevice- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_CONNECTED_DEVICEstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त पूरी होनी चाहिए:
अपने मेनिफ़ेस्ट में, इनमें से कम से कम एक अनुमति का एलान करें:
इनमें से कम से कम एक रनटाइम अनुमति का अनुरोध करें और उसे मंज़ूरी पाएं:
UsbManager.requestPermission()को कॉल करें
- ब्यौरा
बाहरी डिवाइसों के साथ इंटरैक्शन, जिनके लिए ब्लूटूथ, एनएफ़सी, आईआर, यूएसबी या इंटरनेट की ज़रूरत होती है.
- विकल्प
अगर आपके ऐप्लिकेशन को किसी बाहरी डिवाइस पर लगातार डेटा ट्रांसफ़र करना है, तो इसके बजाय साथी डिवाइस मैनेजर का इस्तेमाल करें. साथी डिवाइस के मौजूद होने की जानकारी देने वाले एपीआई का इस्तेमाल करें, ताकि साथी डिवाइस की रेंज में रहने पर आपका ऐप्लिकेशन चालू रहे.
अगर आपके ऐप्लिकेशन को ब्लूटूथ डिवाइसों को स्कैन करना है, तो इसके बजाय ब्लूटूथ स्कैन एपीआई का इस्तेमाल करें.
डेटा सिंक करना
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypedataSync- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_DATA_SYNCstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_DATA_SYNC- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
डेटा ट्रांसफ़र करने की कार्रवाइयां, जैसे कि:
- डेटा अपलोड या डाउनलोड करना
- बैकअप लेने और डेटा वापस पाने की सुविधा
- इंपोर्ट या एक्सपोर्ट करने की कार्रवाइयां
- डेटा फ़ेच करना
- लोकल फ़ाइल प्रोसेसिंग
- नेटवर्क की मदद से, किसी डिवाइस और क्लाउड के बीच डेटा ट्रांसफ़र करना
- विकल्प
ज़्यादा जानकारी के लिए, डेटा सिंक करने वाली फ़ोरग्राउंड सेवाओं के विकल्प देखें.
बैटरी की परफ़ॉर्मेंस
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypehealth- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_HEALTHstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_HEALTH- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त पूरी होनी चाहिए:
अपने मेनिफ़ेस्ट में
HIGH_SAMPLING_RATE_SENSORSकी अनुमति का एलान करें.इनमें से कम से कम एक रनटाइम अनुमति का अनुरोध करें और उसे मंज़ूरी पाएं:
- एपीआई लेवल 35 और उससे पहले के वर्शन पर
BODY_SENSORS READ_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_RECOGNITION
- एपीआई लेवल 35 और उससे पहले के वर्शन पर
ध्यान दें:
BODY_SENSORSऔर सेंसर पर आधारित, रीड रनटाइम की अनुमतियों पर, इस्तेमाल के दौरान लागू होने वाली पाबंदियां लागू होती हैं. इस वजह से, जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तबhealthफ़ोरग्राउंड सेवा बनाई नहीं जा सकती. ऐसा तब तक नहीं किया जा सकता, जब तक आपकोBODY_SENSORS_BACKGROUND(एपीआई लेवल 33 से 35) याREAD_HEALTH_DATA_IN_BACKGROUND(एपीआई लेवल 36 और उसके बाद के वर्शन) की अनुमतियां नहीं मिल जातीं. ज़्यादा जानकारी के लिए, फ़ोरग्राउंड में चलने वाली उन सेवाओं को शुरू करने से जुड़ी पाबंदियां जिनके लिए इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है देखें.- ब्यौरा
फ़िटनेस कैटगरी के ऐप्लिकेशन के साथ काम करने के लिए, लंबे समय से इस्तेमाल किए जा रहे उदाहरण. जैसे, कसरत ट्रैकर.
जगह की जानकारी
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypelocation- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_LOCATIONstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_LOCATION- रनटाइम की ज़रूरी शर्तें
उपयोगकर्ता ने जगह की जानकारी की सेवाएं चालू की हों और ऐप्लिकेशन को इनमें से कम से कम एक रनटाइम अनुमति दी गई हो:
ध्यान दें: यह देखने के लिए कि उपयोगकर्ता ने जगह की जानकारी की सेवाओं को चालू किया है या नहीं और साथ ही, रनटाइम की अनुमतियों का ऐक्सेस दिया है या नहीं,
PermissionChecker#checkSelfPermission()का इस्तेमाल करेंध्यान दें: जगह की जानकारी की रनटाइम अनुमतियां, इस्तेमाल के दौरान लागू होने वाली पाबंदियों के दायरे में आती हैं. इस वजह से, जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तब
locationफ़ोरग्राउंड सेवा नहीं बनाई जा सकती. ऐसा तब तक नहीं किया जा सकता, जब तक आपकोACCESS_BACKGROUND_LOCATIONरनटाइम की अनुमति न मिल जाए. ज़्यादा जानकारी के लिए, ऐसी फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियां जिनके लिए इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है देखें.- ब्यौरा
लंबे समय तक चलने वाले ऐसे इस्तेमाल के उदाहरण जिनके लिए जगह की जानकारी का ऐक्सेस ज़रूरी है. जैसे, नेविगेशन और जगह की जानकारी शेयर करना.
- विकल्प
अगर उपयोगकर्ता किसी खास जगह पर पहुंचने पर आपके ऐप्लिकेशन को ट्रिगर करना है, तो इसके बजाय geofence API का इस्तेमाल करें.
मीडिया
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypemediaPlayback- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_MEDIA_PLAYBACKstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
- ऑडियो या वीडियो को बैकग्राउंड में चलाना जारी रखें. Android TV पर डिजिटल वीडियो रिकॉर्डिंग (डीवीआर) की सुविधा काम करती हो.
- विकल्प
- अगर पिक्चर में पिक्चर मोड में वीडियो दिखाया जा रहा है, तो पिक्चर में पिक्चर मोड का इस्तेमाल करें.
मीडिया प्रोजेक्शन
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypemediaProjection- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_MEDIA_PROJECTIONstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- रनटाइम की ज़रूरी शर्तें
फ़ोरग्राउंड सेवा शुरू करने से पहले,
createScreenCaptureIntent()तरीके को कॉल करें. ऐसा करने पर, उपयोगकर्ता को अनुमति की सूचना दिखती है. सेवा बनाने से पहले, उपयोगकर्ता को अनुमति देनी होगी.फ़ोरग्राउंड सेवा बनाने के बाद,
MediaProjectionManager.getMediaProjection()को कॉल किया जा सकता है.- ब्यौरा
MediaProjectionएपीआई का इस्तेमाल करके, कॉन्टेंट को नॉन-प्राइमरी डिसप्ले या बाहरी डिवाइस पर प्रोजेक्ट करें. यह ज़रूरी नहीं है कि यह कॉन्टेंट सिर्फ़ मीडिया कॉन्टेंट हो.- विकल्प
किसी दूसरे डिवाइस पर मीडिया स्ट्रीम करने के लिए, Google Cast SDK का इस्तेमाल करें.
माइक्रोफ़ोन
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypemicrophone- 在清单中声明的权限
FOREGROUND_SERVICE_MICROPHONE- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_MICROPHONE- 运行时前提条件
请求并获得
RECORD_AUDIO运行时权限。注意:
RECORD_AUDIO运行时权限受使用时限制的约束。因此,除少数例外情况外,您无法在应用在后台运行时创建microphone前台服务。如需了解详情,请参阅与启动需要使用时权限的前台服务相关的限制。- 说明
在后台继续捕获麦克风内容,例如录音器或通信应用。
फ़ोन कॉल
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypephoneCall- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_PHONE_CALLstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_PHONE_CALL- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त सही होनी चाहिए:
- ऐप्लिकेशन ने अपनी मेनिफ़ेस्ट फ़ाइल में
MANAGE_OWN_CALLSअनुमति का एलान किया है.
- ऐप्लिकेशन ने अपनी मेनिफ़ेस्ट फ़ाइल में
- ऐप्लिकेशन,
ROLE_DIALERभूमिका के ज़रिए डिफ़ॉल्ट डायलर ऐप्लिकेशन है.
- ऐप्लिकेशन,
- ब्यौरा
ConnectionServiceएपीआई का इस्तेमाल करके, किसी मौजूदा कॉल को जारी रखना.- विकल्प
अगर आपको फ़ोन, वीडियो या VoIP कॉल करने हैं, तो
android.telecomलाइब्रेरी का इस्तेमाल करें.कॉल की जांच करने के लिए,
CallScreeningServiceका इस्तेमाल करें.
रिमोट मैसेज सेवा
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTyperemoteMessaging- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_REMOTE_MESSAGINGstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
- मैसेज को एक डिवाइस से दूसरे डिवाइस पर ट्रांसफ़र करना. जब उपयोगकर्ता एक डिवाइस पर किसी बातचीत को अधूरा छोड़कर किसी अन्य डिवाइस से मैसेज करने लगता है, तो इस सेवा की मदद से बातचीत वहीं से शुरू की जा सकती है जहां पर उपयोगकर्ता ने छोड़ी थी.
संक्षिप्त सेवा
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypeshortService- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
- कोई नहीं
startForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_SHORT_SERVICE- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
ज़रूरी काम को जल्दी से पूरा करना, जिसमें रुकावट नहीं आनी चाहिए या जिसे बाद में नहीं किया जा सकता.
इस टाइप की कुछ खास विशेषताएं हैं:
- यह सिर्फ़ कुछ समय (लगभग तीन मिनट) के लिए चल सकता है.
- स्टिकी फ़ोरग्राउंड सेवाओं के साथ काम नहीं करता.
- अन्य फ़ोरग्राउंड सेवाएं शुरू नहीं की जा सकतीं.
- इसके लिए, टाइप के हिसाब से अनुमति की ज़रूरत नहीं होती. हालांकि, इसके लिए
FOREGROUND_SERVICEअनुमति की ज़रूरत होती है. shortServiceको किसी दूसरी सेवा के टाइप में सिर्फ़ तब बदला जा सकता है, जब ऐप्लिकेशन फ़िलहाल नई फ़ोरग्राउंड सेवा शुरू करने की ज़रूरी शर्तें पूरी करता हो.- फ़ोरग्राउंड सेवा, अपने टाइप को किसी भी समय
shortServiceमें बदल सकती है. ऐसा करने पर, टाइम आउट की अवधि शुरू हो जाती है.
shortService के लिए टाइम आउट,
Service.startForeground()को कॉल करने के बाद शुरू होता है. ऐप्लिकेशन को टाइम आउट होने से पहले,Service.stopSelf()याService.stopForeground()को कॉल करना चाहिए. अगर ऐसा नहीं होता है, तो नयाService.onTimeout()कॉल किया जाता है. इससे ऐप्लिकेशन को अपनी सेवा बंद करने के लिए,stopSelf()याstopForeground()को कॉल करने का थोड़ा समय मिलता है.Service.onTimeout()को कॉल करने के कुछ समय बाद, ऐप्लिकेशन कैश मेमोरी में सेव होने की स्थिति में चला जाता है. इसके बाद, जब तक उपयोगकर्ता ऐप्लिकेशन का इस्तेमाल करता रहता है, तब तक उसे फ़ोरग्राउंड में नहीं माना जाता. ऐप्लिकेशन के कैश मेमोरी में सेव होने और सेवा के बंद न होने के कुछ समय बाद, ऐप्लिकेशन को ANR मिलता है. ANR मैसेज मेंFOREGROUND_SERVICE_TYPE_SHORT_SERVICEका ज़िक्र है. इन वजहों से,Service.onTimeout()कॉलबैक को लागू करना सबसे सही तरीका माना जाता है.Service.onTimeout()कॉलबैक की सुविधा, Android 13 और इससे पहले के वर्शन पर उपलब्ध नहीं है. अगर यही सेवा ऐसे डिवाइसों पर चलती है, तो उसे टाइम आउट नहीं मिलता और न ही ANR होता है. पक्का करें कि प्रोसेस करने का टास्क पूरा होने के बाद, आपकी सेवा बंद हो जाए. भले ही, उसे अब तकService.onTimeout()कॉलबैक न मिला हो.यह ध्यान रखना ज़रूरी है कि अगर
shortServiceके टाइम आउट का पालन नहीं किया जाता है, तो ऐप्लिकेशन में ANR की गड़बड़ी दिखेगी. भले ही, उसमें कोई दूसरी मान्य फ़ोरग्राउंड सेवाएं या ऐप्लिकेशन लाइफ़साइकल की अन्य प्रोसेस चल रही हों.अगर कोई ऐप्लिकेशन उपयोगकर्ता को दिख रहा है या वह छूट की उन शर्तों में से किसी एक को पूरा करता है जिनकी वजह से फ़ोरग्राउंड सेवाओं को बैकग्राउंड से शुरू किया जा सकता है, तो
FOREGROUND_SERVICE_TYPE_SHORT_SERVICEपैरामीटर के साथ फिर सेService.StartForeground()को कॉल करने पर, टाइम आउट को तीन मिनट और बढ़ा दिया जाता है. अगर ऐप्लिकेशन, उपयोगकर्ता को नहीं दिख रहा है और वह छूट की किसी शर्त को पूरा नहीं करता है, तो किसी भी तरह की फ़ोरग्राउंड सेवा शुरू करने की कोशिश करने पर,ForegroundServiceStartNotAllowedExceptionदिखता है.अगर कोई उपयोगकर्ता आपके ऐप्लिकेशन के लिए बैटरी ऑप्टिमाइज़ेशन की सुविधा बंद कर देता है, तो भी shortService FGS के टाइम आउट का उस पर असर पड़ता है.
अगर कोई ऐसी फ़ोरग्राउंड सेवा शुरू की जाती है जिसमें
shortServiceटाइप और फ़ोरग्राउंड सेवा का कोई दूसरा टाइप शामिल है, तो सिस्टमshortServiceटाइप के एलान को अनदेखा कर देता है. हालांकि, सेवा को अब भी ज़ाहिर किए गए अन्य टाइप की ज़रूरी शर्तों का पालन करना होगा. ज़्यादा जानकारी के लिए, फ़ोरग्राउंड सेवाओं का दस्तावेज़ देखें.
खास इस्तेमाल
- मेनिफ़ेस्ट में जानकारी देने के लिए, फ़ोरग्राउंड सेवा का टाइप
android:foregroundServiceTypespecialUse- अपने मेनिफ़ेस्ट में जानकारी देने की अनुमति
FOREGROUND_SERVICE_SPECIAL_USEstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_SPECIAL_USE- रनटाइम से जुड़ी ज़रूरी शर्तें
- बिलकुल नहीं
- ब्यौरा
फ़ोरग्राउंड सेवा के इस्तेमाल के ऐसे मान्य उदाहरणों को शामिल करता है जो फ़ोरग्राउंड सेवा के अन्य टाइप में शामिल नहीं हैं.
FOREGROUND_SERVICE_TYPE_SPECIAL_USEसे जुड़ा एलान करने के अलावा फ़ोरग्राउंड सेवा का टाइप है, तो डेवलपर को मेनिफ़ेस्ट. ऐसा करने के लिए, वे<property>एलिमेंट को<service>एलिमेंट. ये वैल्यू और उनके इस्तेमाल के उदाहरण ये हैं की समीक्षा की जाती है. इस्तेमाल आपकी ओर से दिए जाने वाले केस फ़्री-फ़ॉर्म हैं. साथ ही, आपको यह पक्का करना चाहिए कि जानकारी दें, ताकि समीक्षक यह देख सकें कि आपकोspecialUseका इस्तेमाल क्यों करना चाहिए टाइप करें.<service android:name="fooService" android:foregroundServiceType="specialUse"> <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="explanation_for_special_use"/> </service>
सिस्टम को छूट मिली
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypesystemExempted- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_SYSTEM_EXEMPTEDstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
सिस्टम ऐप्लिकेशन और खास सिस्टम इंटिग्रेशन के लिए, फ़ोरग्राउंड सेवाओं का इस्तेमाल जारी रखने के लिए.
इस टाइप का इस्तेमाल करने के लिए, ऐप्लिकेशन को इनमें से कम से कम एक शर्त पूरी करनी होगी:
- डिवाइस डेमो मोड में है
- ऐप्लिकेशन, डिवाइस का मालिक है
- ऐप्लिकेशन, प्रोफ़ाइलर का मालिक है
- Safety ऐप्लिकेशन, जिनके पास
ROLE_EMERGENCYभूमिका है - डिवाइस एडमिन ऐप्लिकेशन
- ऐसे ऐप्लिकेशन जिनके पास
SCHEDULE_EXACT_ALARMयाUSE_EXACT_ALARMअनुमति है और जो बैकग्राउंड में अलार्म जारी रखने के लिए, फ़ोरग्राउंड सेवा का इस्तेमाल कर रहे हैं. इनमें सिर्फ़ वाइब्रेशन वाले अलार्म भी शामिल हैं. वीपीएन ऐप्लिकेशन (सेटिंग > नेटवर्क और इंटरनेट > वीपीएन का इस्तेमाल करके कॉन्फ़िगर किए गए)
ऐसा न करने पर, इस टाइप का एलान करने पर सिस्टम से
ForegroundServiceTypeNotAllowedExceptionदिखता है.
फ़ोरग्राउंड सेवाओं के टाइप इस्तेमाल करने के लिए, Google Play की नीति को लागू करने का तरीका
अगर आपका ऐप्लिकेशन Android 14 या उसके बाद के वर्शन को टारगेट करता है, तो आपको Play Console के ऐप्लिकेशन कॉन्टेंट पेज (नीति > ऐप्लिकेशन कॉन्टेंट) पर, अपने ऐप्लिकेशन की फ़ोरग्राउंड सेवाओं के टाइप का एलान करना होगा. Play Console में फ़ोरग्राउंड सेवा के टाइप की जानकारी देने के तरीके के बारे में ज़्यादा जानने के लिए, फ़ोरग्राउंड सेवा और फ़ुल-स्क्रीन इंटेंट की ज़रूरी शर्तों के बारे में जानकारी देखें.