Android 14 (एपीआई लेवल 34) से, आपको हर फ़ोरग्राउंड सेवा के लिए सही सेवा टाइप का एलान करना होगा. इसका मतलब है कि आपको अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में सेवा के टाइप का एलान करना होगा. साथ ही, उस टाइप के लिए फ़ोरग्राउंड सेवा की सही अनुमति का अनुरोध करना होगा. इसके अलावा, आपको FOREGROUND_SERVICE
अनुमति का अनुरोध भी करना होगा. इसके अलावा, फ़ोरग्राउंड सेवा के टाइप के आधार पर, हो सकता है कि आपको सेवा लॉन्च करने से पहले, रनटाइम अनुमतियों का अनुरोध करना पड़े.
कैमरा
android:foregroundServiceType
में मेनिफ़ेस्ट में फ़ोरग्राउंड सेवा के टाइप का एलान करनाcamera
- मेनिफ़ेस्ट में अनुमति का एलान करने की अनुमति
FOREGROUND_SERVICE_CAMERA
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CAMERA
- रनटाइम की ज़रूरी शर्तें
CAMERA
रनटाइम अनुमति का अनुरोध करना और उसे स्वीकार किया जाना- ब्यौरा
इसका इस्तेमाल करके, बैकग्राउंड में कैमरे को ऐक्सेस करना जारी रखा जा सकता है. जैसे, ऐसे वीडियो चैट ऐप्लिकेशन जो मल्टीटास्किंग (एक साथ कई काम करना) की सुविधा देते हैं.
कनेक्ट किया गया डिवाइस
- Foreground service type to declare in manifest under
android:foregroundServiceType
connectedDevice
- Permission to declare in your manifest
FOREGROUND_SERVICE_CONNECTED_DEVICE
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
- Runtime prerequisites
At least one of the following conditions must be true:
Declare at least one of the following permissions in your manifest:
Request and be granted at least one of the following runtime permissions:
- Description
Interactions with external devices that require a Bluetooth, NFC, IR, USB, or network connection.
- Alternatives
If your app needs to do continuous data transfer to an external device, consider using the companion device manager instead. Use the companion device presence API to help your app stay running while the companion device is in range.
If your app needs to scan for bluetooth devices, consider using the Bluetooth scan API instead.
डेटा सिंक करना
- मेनिफ़ेस्ट में इस सेक्शन के तहत फ़ोरग्राउंड सेवा का टाइप बताएं
android:foregroundServiceType
dataSync
- मेनिफ़ेस्ट में अनुमति का एलान करने की अनुमति
FOREGROUND_SERVICE_DATA_SYNC
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_DATA_SYNC
- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
डेटा ट्रांसफ़र करने की कार्रवाइयां, जैसे कि ये:
- डेटा अपलोड या डाउनलोड करना
- बैकअप लेने और वापस लाने की कार्रवाइयां
- इंपोर्ट या एक्सपोर्ट करने की कार्रवाइयां
- डेटा फ़ेच करना
- लोकल फ़ाइल प्रोसेसिंग
- किसी डिवाइस और क्लाउड के बीच नेटवर्क पर डेटा ट्रांसफ़र करना
लेख पढ़ें.
- विकल्प
ज़्यादा जानकारी के लिए, डेटा सिंक करने वाली फ़ोरग्राउंड सेवाओं के विकल्प देखें.
बैटरी की परफ़ॉर्मेंस
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
health
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_HEALTH
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_HEALTH
- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त पूरी होनी चाहिए:
अपने मेनिफ़ेस्ट में
HIGH_SAMPLING_RATE_SENSORS
की अनुमति का एलान करें.इनमें से कम से कम एक रनटाइम अनुमति का अनुरोध करें और उसे मंज़ूरी पाएं:
- एपीआई 35 और इससे पहले के वर्शन पर
BODY_SENSORS
READ_HEART_RATE
READ_SKIN_TEMPERATURE
READ_OXYGEN_SATURATION
ACTIVITY_RECOGNITION
- एपीआई 35 और इससे पहले के वर्शन पर
- ब्यौरा
फ़िटनेस कैटगरी के ऐप्लिकेशन के साथ काम करने के लिए, लंबे समय से इस्तेमाल किए जा रहे उदाहरण. जैसे, कसरत ट्रैकर.
जगह की जानकारी
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
location
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_LOCATION
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_LOCATION
- रनटाइम की ज़रूरी शर्तें
उपयोगकर्ता ने जगह की जानकारी की सेवाएं चालू की हों और ऐप्लिकेशन को इनमें से कम से कम एक रनटाइम अनुमति दी गई हो:
- ब्यौरा
लंबे समय तक चलने वाले ऐसे इस्तेमाल के उदाहरण जिनके लिए जगह की जानकारी का ऐक्सेस ज़रूरी है. जैसे, नेविगेशन और जगह की जानकारी शेयर करना.
- विकल्प
अगर उपयोगकर्ता किसी खास जगह पर पहुंचने पर आपके ऐप्लिकेशन को ट्रिगर करना है, तो इसके बजाय geofence API का इस्तेमाल करें.
मीडिया
- मेनिफ़ेस्ट में इस सेक्शन के तहत फ़ोरग्राउंड सेवा का टाइप बताएं
android:foregroundServiceType
mediaPlayback
- मेनिफ़ेस्ट में अनुमति का एलान करने की अनुमति
FOREGROUND_SERVICE_MEDIA_PLAYBACK
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
इसका इस्तेमाल करके, कोई भी ऑडियो या वीडियो बैकग्राउंड में चलाया जा सकता है. Android TV पर डिजिटल वीडियो रिकॉर्डिंग (डीवीआर) की सुविधा काम करती है.
लेख पढ़ें.
- विकल्प
अगर आपको पिक्चर में पिक्चर मोड में वीडियो दिखाना है, तो पिक्चर में पिक्चर मोड का इस्तेमाल करें.
मीडिया प्रोसेस करना
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
mediaProcessing
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_MEDIA_PROCESSING
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING
- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
मीडिया ऐसेट पर ज़्यादा समय लेने वाले काम करने की सेवा. जैसे, मीडिया को अलग-अलग फ़ॉर्मैट में बदलना. सिस्टम इस सेवा को सीमित समय के लिए चलाने की अनुमति देता है. आम तौर पर, यह समयसीमा हर 24 घंटे में 6 घंटे की होती है. (यह सीमा, ऐप्लिकेशन की सभी
mediaProcessing
फ़ोरग्राउंड सेवाओं के लिए लागू होती है.)आपके ऐप्लिकेशन को मीडिया प्रोसेसिंग सेवा को मैन्युअल तरीके से बंद करना चाहिए, अगर:
- ट्रांसकोडिंग की प्रोसेस पूरी होने या गड़बड़ी की स्थिति में पहुंचने पर, सेवा को पूरी तरह से बंद करने के लिए, सेवा को
Service.stopForeground()
औरService.stopSelf()
पर कॉल करने दें.
- ट्रांसकोडिंग की प्रोसेस पूरी होने या गड़बड़ी की स्थिति में पहुंचने पर, सेवा को पूरी तरह से बंद करने के लिए, सेवा को
टाइम आउट की अवधि खत्म होने पर, सिस्टम सेवा के
Service.onTimeout(int, int)
तरीके को कॉल करता है. इस समय, सेवा के पासService.stopSelf()
को कॉल करने के लिए कुछ सेकंड होते हैं. अगर सेवाService.stopSelf()
को कॉल नहीं करती है, तो इस गड़बड़ी के मैसेज के साथ ANR होगा: "<fgs_type> की फ़ोरग्राउंड सेवा, तय समयसीमा में नहीं रुकी: <component_name>".ध्यान दें:
Service.onTimeout(int, int)
, Android 14 या इससे पहले के वर्शन पर उपलब्ध नहीं है. इन वर्शन वाले डिवाइसों पर, अगर मीडिया प्रोसेस करने वाली सेवा टाइम आउट की अवधि तक पहुंच जाती है, तो सिस्टम तुरंत ऐप्लिकेशन को कैश मेमोरी में सेव कर देता है. इसलिए, आपके ऐप्लिकेशन को टाइम आउट की सूचना मिलने का इंतज़ार नहीं करना चाहिए. इसके बजाय, उसे फ़ोरग्राउंड सेवा को बंद कर देना चाहिए या ज़रूरत पड़ने पर उसे बैकग्राउंड सेवा में बदल देना चाहिए.
मीडिया प्रोजेक्शन
- मेनिफ़ेस्ट में इस सेक्शन के तहत फ़ोरग्राउंड सेवा का टाइप बताएं
android:foregroundServiceType
mediaProjection
- मेनिफ़ेस्ट में अनुमति का एलान करने की अनुमति
FOREGROUND_SERVICE_MEDIA_PROJECTION
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- रनटाइम की ज़रूरी शर्तें
फ़ोरग्राउंड सेवा शुरू करने से पहले,
createScreenCaptureIntent()
तरीके को कॉल करें. ऐसा करने पर, उपयोगकर्ता को अनुमति से जुड़ी सूचना दिखती है; सेवा बनाने से पहले, उपयोगकर्ता को अनुमति देनी होगी.फ़ोरग्राउंड सेवा बनाने के बाद,
MediaProjectionManager.getMediaProjection()
को कॉल किया जा सकता है.- ब्यौरा
MediaProjection
API का इस्तेमाल करके, कॉन्टेंट को नॉन-प्राइमरी डिसप्ले या बाहरी डिवाइस पर प्रोजेक्ट किया जा सकता है. यह ज़रूरी नहीं है कि इस कॉन्टेंट में सिर्फ़ मीडिया कॉन्टेंट शामिल हो. लेख पढ़ें.
- विकल्प
किसी दूसरे डिवाइस पर मीडिया स्ट्रीम करने के लिए, Google Cast SDK का इस्तेमाल करें.
माइक्रोफ़ोन
- मेनिफ़ेस्ट में इस सेक्शन के तहत फ़ोरग्राउंड सेवा का टाइप बताएं
android:foregroundServiceType
microphone
- मेनिफ़ेस्ट में अनुमति का एलान करने की अनुमति
FOREGROUND_SERVICE_MICROPHONE
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MICROPHONE
- रनटाइम की ज़रूरी शर्तें
RECORD_AUDIO
रनटाइम अनुमति का अनुरोध करें और उसे स्वीकार किया जाए.- ब्यौरा
इसका इस्तेमाल करके, बैकग्राउंड में माइक्रोफ़ोन से आवाज़ कैप्चर की जा सकती है. जैसे, वॉइस रिकॉर्डर या कम्यूनिकेशन ऐप्लिकेशन.
फ़ोन कॉल
- मेनिफ़ेस्ट में इस सेक्शन के तहत फ़ोरग्राउंड सेवा का टाइप बताएं
android:foregroundServiceType
phoneCall
- मेनिफ़ेस्ट में अनुमति का एलान करने की अनुमति
FOREGROUND_SERVICE_PHONE_CALL
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_PHONE_CALL
- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त पूरी होनी चाहिए:
- ऐप्लिकेशन ने अपनी मेनिफ़ेस्ट फ़ाइल में
MANAGE_OWN_CALLS
अनुमति का एलान किया हो.
- ऐप्लिकेशन ने अपनी मेनिफ़ेस्ट फ़ाइल में
- ऐप्लिकेशन को
ROLE_DIALER
भूमिका के ज़रिए, डिफ़ॉल्ट डायलर ऐप्लिकेशन के तौर पर सेट किया गया हो.
लेख पढ़ें.
- ऐप्लिकेशन को
- ब्यौरा
ConnectionService
एपीआई का इस्तेमाल करके, जारी कॉल को जारी रखें.- विकल्प
अगर आपको फ़ोन, वीडियो या वीओआईपी कॉल करने हैं, तो
android.telecom
लाइब्रेरी का इस्तेमाल करें.कॉल स्क्रीन करने के लिए,
CallScreeningService
का इस्तेमाल करें.
रिमोट मैसेज सेवा
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
remoteMessaging
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_REMOTE_MESSAGING
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
- मैसेज को एक डिवाइस से दूसरे डिवाइस पर ट्रांसफ़र करना. जब उपयोगकर्ता एक डिवाइस पर किसी बातचीत को अधूरा छोड़कर किसी अन्य डिवाइस से मैसेज करने लगता है, तो इस सेवा की मदद से बातचीत वहीं से शुरू की जा सकती है जहां पर उपयोगकर्ता ने छोड़ी थी.
शॉर्ट सर्विस
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
shortService
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
- कोई नहीं
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:foregroundServiceType
specialUse
- अपने मेनिफ़ेस्ट में जानकारी देने की अनुमति
FOREGROUND_SERVICE_SPECIAL_USE
startForeground()
को पास करने के लिए कॉन्स्टेंट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:foregroundServiceType
systemExempted
- मेनिफ़ेस्ट में अनुमति का एलान करने की अनुमति
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
यह सिस्टम ऐप्लिकेशन और सिस्टम के कुछ इंटिग्रेशन के लिए रिज़र्व है, ताकि वे फ़ोरग्राउंड सेवाओं का इस्तेमाल जारी रख सकें.
इस टाइप का इस्तेमाल करने के लिए, ऐप्लिकेशन को इनमें से कम से कम एक शर्त पूरी करनी होगी:
- डिवाइस डेमो मोड में है
- ऐप्लिकेशन, डिवाइस का मालिक है
- ऐप्लिकेशन, प्रोफ़ाइलर का मालिक है
ROLE_EMERGENCY
की भूमिका वाले Safety ऐप्लिकेशन- डिवाइस एडमिन ऐप्लिकेशन
SCHEDULE_EXACT_ALARM
याUSE_EXACT_ALARM
अनुमति वाले ऐप्लिकेशनवीपीएन ऐप्लिकेशन (सेटिंग > नेटवर्क और इंटरनेट > वीपीएन का इस्तेमाल करके कॉन्फ़िगर किए गए)
ऐसा न करने पर, सिस्टम
ForegroundServiceTypeNotAllowedException
दिखाएगा.
फ़ोरग्राउंड सेवा के टाइप इस्तेमाल करने के लिए, Google Play की नीति का उल्लंघन रोकने का तरीका
If your app targets Android 14 or higher, you'll need to declare your app's foreground service types in the Play Console's app content page (Policy > App content). For more information on how to declare your foreground service types in Play Console, see Understanding foreground service and full-screen intent requirements.