Android 14 (एपीआई लेवल 34) से, आपको हर फ़ोरग्राउंड सेवा के लिए सही सेवा टाइप का एलान करना होगा. इसका मतलब है कि आपको अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में सेवा के टाइप का एलान करना होगा. साथ ही, उस टाइप के लिए फ़ोरग्राउंड सेवा की सही अनुमति का अनुरोध करना होगा. इसके अलावा, आपको FOREGROUND_SERVICE अनुमति का अनुरोध भी करना होगा. इसके अलावा, फ़ोरग्राउंड सेवा के टाइप के आधार पर, हो सकता है कि आपको सेवा लॉन्च करने से पहले, रनटाइम अनुमतियों का अनुरोध करना पड़े.
कैमरा
android:foregroundServiceTypeमें मेनिफ़ेस्ट में फ़ोरग्राउंड सेवा का टाइपcamera- मेनिफ़ेस्ट में अनुमति का एलान करना
FOREGROUND_SERVICE_CAMERAstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CAMERA- रनटाइम की ज़रूरी शर्तें
CAMERAरनटाइम अनुमति का अनुरोध करना और उसे स्वीकार किया जाना- ब्यौरा
इसका इस्तेमाल करके, बैकग्राउंड में कैमरे को ऐक्सेस करना जारी रखा जा सकता है. जैसे, ऐसे वीडियो चैट ऐप्लिकेशन जो मल्टीटास्किंग (एक साथ कई काम करना) की सुविधा देते हैं.
कनेक्ट किया गया डिवाइस
- Foreground service type to declare in manifest under
android:foregroundServiceTypeconnectedDevice- 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: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 और इससे पहले के वर्शन पर
- ब्यौरा
फ़िटनेस कैटगरी के ऐप्लिकेशन के साथ काम करने के लिए, लंबे समय से इस्तेमाल किए जा रहे उदाहरण. जैसे, कसरत ट्रैकर.
जगह की जानकारी
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypelocation- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_LOCATIONstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_LOCATION- रनटाइम की ज़रूरी शर्तें
उपयोगकर्ता ने जगह की जानकारी की सेवाएं चालू की हों और ऐप्लिकेशन को इनमें से कम से कम एक रनटाइम अनुमति दी गई हो:
- ब्यौरा
लंबे समय तक चलने वाले ऐसे इस्तेमाल के उदाहरण जिनके लिए जगह की जानकारी का ऐक्सेस ज़रूरी है. जैसे, नेविगेशन और जगह की जानकारी शेयर करना.
- विकल्प
अगर उपयोगकर्ता किसी खास जगह पर पहुंचने पर आपके ऐप्लिकेशन को ट्रिगर करना है, तो इसके बजाय geofence API का इस्तेमाल करें.
मीडिया
- मेनिफ़ेस्ट में इस सेक्शन के तहत फ़ोरग्राउंड सेवा का टाइप बताएं
android:foregroundServiceTypemediaPlayback- मेनिफ़ेस्ट में अनुमति का एलान करना
FOREGROUND_SERVICE_MEDIA_PLAYBACKstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
इसका इस्तेमाल करके, कोई भी ऑडियो या वीडियो बैकग्राउंड में चलाया जा सकता है. Android TV पर डिजिटल वीडियो रिकॉर्डिंग (डीवीआर) की सुविधा काम करती है.
लेख पढ़ें.
- विकल्प
अगर आपको पिक्चर में पिक्चर मोड में वीडियो दिखाना है, तो पिक्चर में पिक्चर मोड का इस्तेमाल करें.
मीडिया प्रोसेस करना
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypemediaProcessing- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_MEDIA_PROCESSINGstartForeground()को पास करने के लिए कॉन्स्टेंट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:foregroundServiceTypemediaProjection- मेनिफ़ेस्ट में अनुमति का एलान करना
FOREGROUND_SERVICE_MEDIA_PROJECTIONstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- रनटाइम की ज़रूरी शर्तें
फ़ोरग्राउंड सेवा शुरू करने से पहले,
createScreenCaptureIntent()तरीके को कॉल करें. ऐसा करने पर, उपयोगकर्ता को अनुमति से जुड़ी सूचना दिखती है; सेवा बनाने से पहले, उपयोगकर्ता को अनुमति देनी होगी.फ़ोरग्राउंड सेवा बनाने के बाद,
MediaProjectionManager.getMediaProjection()को कॉल किया जा सकता है.- ब्यौरा
MediaProjectionएपीआई का इस्तेमाल करके, कॉन्टेंट को नॉन-प्राइमरी डिसप्ले या बाहरी डिवाइस पर प्रोजेक्ट किया जा सकता है. यह ज़रूरी नहीं है कि इस कॉन्टेंट में सिर्फ़ मीडिया कॉन्टेंट शामिल हो. लेख पढ़ें.
- विकल्प
किसी दूसरे डिवाइस पर मीडिया स्ट्रीम करने के लिए, Google Cast SDK का इस्तेमाल करें.
माइक्रोफ़ोन
- मेनिफ़ेस्ट में इस सेक्शन के तहत फ़ोरग्राउंड सेवा का टाइप बताएं
android:foregroundServiceTypemicrophone- मेनिफ़ेस्ट में अनुमति का एलान करना
FOREGROUND_SERVICE_MICROPHONEstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MICROPHONE- रनटाइम की ज़रूरी शर्तें
RECORD_AUDIOरनटाइम अनुमति का अनुरोध करें और उसे स्वीकार किया जाए.- ब्यौरा
इसका इस्तेमाल करके, बैकग्राउंड में माइक्रोफ़ोन से आवाज़ कैप्चर की जा सकती है. जैसे, वॉइस रिकॉर्डर या कम्यूनिकेशन ऐप्लिकेशन.
फ़ोन कॉल
- मेनिफ़ेस्ट में इस सेक्शन के तहत फ़ोरग्राउंड सेवा का टाइप बताएं
android:foregroundServiceTypephoneCall- मेनिफ़ेस्ट में अनुमति का एलान करना
FOREGROUND_SERVICE_PHONE_CALLstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_PHONE_CALL- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त पूरी होनी चाहिए:
- ऐप्लिकेशन ने अपनी मेनिफ़ेस्ट फ़ाइल में
MANAGE_OWN_CALLSअनुमति का एलान किया हो.
- ऐप्लिकेशन ने अपनी मेनिफ़ेस्ट फ़ाइल में
- ऐप्लिकेशन को
ROLE_DIALERभूमिका के ज़रिए, डिफ़ॉल्ट डायलर ऐप्लिकेशन के तौर पर सेट किया गया हो.
लेख पढ़ें.
- ऐप्लिकेशन को
- ब्यौरा
ConnectionServiceएपीआई का इस्तेमाल करके, जारी कॉल को जारी रखें.- विकल्प
अगर आपको फ़ोन, वीडियो या वीओआईपी कॉल करने हैं, तो
android.telecomलाइब्रेरी का इस्तेमाल करें.कॉल स्क्रीन करने के लिए,
CallScreeningServiceका इस्तेमाल करें.
रिमोट मैसेज सेवा
- Foreground service type to declare in manifest under
android:foregroundServiceTyperemoteMessaging- Permission to declare in your manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- Runtime prerequisites
- None
- Description
- Transfer text messages from one device to another. Assists with continuity of a user's messaging tasks when they switch devices.
कम समय के लिए सेवा
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
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टाइप के एलान को अनदेखा कर देता है. हालांकि, सेवा को अब भी ज़ाहिर किए गए अन्य टाइप की ज़रूरी शर्तों का पालन करना होगा. ज़्यादा जानकारी के लिए, फ़ोरग्राउंड सेवाओं का दस्तावेज़ देखें.
खास इस्तेमाल
- Foreground service type to declare in manifest under
android:foregroundServiceTypespecialUse- Permission to declare in your manifest
FOREGROUND_SERVICE_SPECIAL_USE- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SPECIAL_USE- Runtime prerequisites
- None
- Description
Covers any valid foreground service use cases that aren't covered by the other foreground service types.
In addition to declaring the
FOREGROUND_SERVICE_TYPE_SPECIAL_USEforeground service type, developers should declare use cases in the manifest. To do so, they specify the<property>element within the<service>element. These values and corresponding use cases are reviewed when you submit your app in the Google Play Console. The use cases you provide are free-form, and you should make sure to provide enough information to let the reviewer see why you need to use thespecialUsetype.<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- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
यह सिस्टम ऐप्लिकेशन और सिस्टम के कुछ इंटिग्रेशन के लिए रिज़र्व है, ताकि वे फ़ोरग्राउंड सेवाओं का इस्तेमाल जारी रख सकें.
इस टाइप का इस्तेमाल करने के लिए, ऐप्लिकेशन को इनमें से कम से कम एक शर्त पूरी करनी होगी:
- डिवाइस डेमो मोड में है
- ऐप्लिकेशन, डिवाइस का मालिक है
- ऐप्लिकेशन, प्रोफ़ाइलर का मालिक है
ROLE_EMERGENCYकी भूमिका वाले Safety ऐप्लिकेशन- डिवाइस एडमिन ऐप्लिकेशन
SCHEDULE_EXACT_ALARMयाUSE_EXACT_ALARMअनुमति वाले ऐप्लिकेशनवीपीएन ऐप्लिकेशन (सेटिंग > नेटवर्क और इंटरनेट > वीपीएन का इस्तेमाल करके कॉन्फ़िगर किए गए)
ऐसा न करने पर, सिस्टम
ForegroundServiceTypeNotAllowedExceptionदिखाएगा.
फ़ोरग्राउंड सेवा के टाइप इस्तेमाल करने के लिए, Google Play की नीति का उल्लंघन ठीक करने का तरीका
अगर आपका ऐप्लिकेशन Android 14 या उसके बाद के वर्शन को टारगेट करता है, तो आपको Play Console के ऐप्लिकेशन कॉन्टेंट पेज (नीति > ऐप्लिकेशन कॉन्टेंट) पर, अपने ऐप्लिकेशन की फ़ोरग्राउंड सेवाओं के टाइप का एलान करना होगा. Play Console में फ़ोरग्राउंड सेवा के टाइप की जानकारी देने के तरीके के बारे में ज़्यादा जानने के लिए, फ़ोरग्राउंड सेवा और फ़ुल-स्क्रीन इंटेंट की ज़रूरी शर्तों के बारे में जानकारी देखें.