Android 10 में <service>
एलिमेंट में android:foregroundServiceType
एट्रिब्यूट को जोड़ा गया है. इससे, डेवलपर को उपयोगकर्ताओं के लिए फ़ोरग्राउंड सेवाओं को बेहतर तरीके से तय करने में मदद मिलती है.
अगर आपका ऐप्लिकेशन Android 14 को टारगेट करता है, तो उसमें फ़ोरग्राउंड सेवा के सही टाइप बताने चाहिए. Android के पिछले वर्शन की तरह, कई तरह के टाइप को जोड़ा जा सकता है. इस सूची में, फ़ोरग्राउंड सेवा के टाइप दिखाए गए हैं, जिनमें से किसी एक को चुना जा सकता है:
camera
connectedDevice
dataSync
health
location
mediaPlayback
mediaProjection
microphone
phoneCall
remoteMessaging
shortService
specialUse
systemExempted
अगर आपके ऐप्लिकेशन में इस्तेमाल का कोई उदाहरण इनमें से किसी भी तरह से जुड़ा हुआ नहीं है, तो हमारा सुझाव है कि आप 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
को दिखाएगा.
फ़ोरग्राउंड सेवा के टाइप इस्तेमाल करने के लिए, नई अनुमतियों का एलान करें
If apps that target Android 14 use a foreground service, they must declare a specific permission, based on the foreground service type, that Android 14 introduces. These permissions appear in the sections labeled "permission that you must declare in your manifest file" in the intended use cases and enforcement for each foreground service type section on this page.
All of the permissions are defined as normal permissions and are granted by default. Users cannot revoke these permissions.
रनटाइम के दौरान फ़ोरग्राउंड सेवा का टाइप शामिल करना
फ़ोरग्राउंड सेवाएं शुरू करने वाले ऐप्लिकेशन के लिए सबसे सही तरीका यह है कि वे 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_CAMERA
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CAMERA
- रनटाइम की ज़रूरी शर्तें
CAMERA
रनटाइम की अनुमति का अनुरोध करना और उसे पानाध्यान दें:
CAMERA
रनटाइम की अनुमति, इस्तेमाल के दौरान लागू होने वाली पाबंदियों के दायरे में आती है. इस वजह से, जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तबcamera
फ़ोरग्राउंड सेवा नहीं बनाई जा सकती. हालांकि, कुछ अपवादों के लिए ऐसा किया जा सकता है. ज़्यादा जानकारी के लिए, ऐसी फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियां जिनके लिए इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है देखें.- ब्यौरा
इसका इस्तेमाल करके, बैकग्राउंड में कैमरे को ऐक्सेस करना जारी रखा जा सकता है. जैसे, ऐसे वीडियो चैट ऐप्लिकेशन जो मल्टीटास्किंग (एक साथ कई काम करना) की सुविधा देते हैं.
कनेक्ट किया गया डिवाइस
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
connectedDevice
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_CONNECTED_DEVICE
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त पूरी होनी चाहिए:
अपने मेनिफ़ेस्ट में, इनमें से कम से कम एक अनुमति का एलान करें:
इनमें से कम से कम एक रनटाइम अनुमति का अनुरोध करें और उसे मंज़ूरी पाएं:
UsbManager.requestPermission()
को कॉल करें
- ब्यौरा
बाहरी डिवाइसों के साथ इंटरैक्शन, जिनके लिए ब्लूटूथ, एनएफ़सी, आईआर, यूएसबी या इंटरनेट की ज़रूरत होती है.
- विकल्प
अगर आपके ऐप्लिकेशन को किसी बाहरी डिवाइस पर लगातार डेटा ट्रांसफ़र करना है, तो इसके बजाय साथी डिवाइस मैनेजर का इस्तेमाल करें. साथी डिवाइस के मौजूद होने की जानकारी देने वाले एपीआई का इस्तेमाल करें, ताकि साथी डिवाइस की रेंज में रहने पर आपका ऐप्लिकेशन चालू रहे.
अगर आपके ऐप्लिकेशन को ब्लूटूथ डिवाइसों को स्कैन करना है, तो इसके बजाय ब्लूटूथ स्कैन एपीआई का इस्तेमाल करें.
डेटा सिंक करना
- Foreground service type to declare in manifest under
android:foregroundServiceType
dataSync
- Permission to declare in your manifest
FOREGROUND_SERVICE_DATA_SYNC
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
- Runtime prerequisites
- None
- Description
Data transfer operations, such as the following:
- Data upload or download
- Backup-and-restore operations
- Import or export operations
- Fetch data
- Local file processing
- Transfer data between a device and the cloud over a network
- Alternatives
See Alternatives to data sync foreground services for detailed information.
बैटरी की परफ़ॉर्मेंस
- Foreground service type to declare in manifest under
android:foregroundServiceType
health
- Permission to declare in your manifest
FOREGROUND_SERVICE_HEALTH
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_HEALTH
- Runtime prerequisites
At least one of the following conditions must be true:
Declare the
HIGH_SAMPLING_RATE_SENSORS
permission in your manifest.Request and be granted at least one of the following runtime permissions:
BODY_SENSORS
on API level 35 and lowerREAD_HEART_RATE
READ_SKIN_TEMPERATURE
READ_OXYGEN_SATURATION
ACTIVITY_RECOGNITION
Note: The
BODY_SENSORS
and sensor-based READ runtime permissions are subject to while-in-use restrictions. For this reason, you cannot create ahealth
foreground service that uses body sensors while your app is in the background unless you've been granted theBODY_SENSORS_BACKGROUND
(API level 33 to 35) orREAD_HEALTH_DATA_IN_BACKGROUND
(API level 36 and higher) permissions. For more information, see Restrictions on starting foreground services that need while-in-use permissions.- Description
Any long-running use cases to support apps in the fitness category such as exercise trackers.
जगह की जानकारी
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
location
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_LOCATION
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_LOCATION
- रनटाइम की ज़रूरी शर्तें
उपयोगकर्ता ने जगह की जानकारी की सेवाएं चालू की हों और ऐप्लिकेशन को इनमें से कम से कम एक रनटाइम अनुमति दी गई हो:
ध्यान दें: यह देखने के लिए कि उपयोगकर्ता ने जगह की जानकारी की सेवाओं को चालू किया है या नहीं और साथ ही, रनटाइम की अनुमतियों का ऐक्सेस दिया है या नहीं,
PermissionChecker#checkSelfPermission()
का इस्तेमाल करेंध्यान दें: जगह की जानकारी की रनटाइम अनुमतियां, इस्तेमाल के दौरान लागू होने वाली पाबंदियों के दायरे में आती हैं. इस वजह से, जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तब
location
फ़ोरग्राउंड सेवा नहीं बनाई जा सकती. ऐसा तब तक नहीं किया जा सकता, जब तक आपकोACCESS_BACKGROUND_LOCATION
रनटाइम की अनुमति न मिल जाए. ज़्यादा जानकारी के लिए, ऐसी फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियां जिनके लिए इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है देखें.- ब्यौरा
लंबे समय तक चलने वाले ऐसे इस्तेमाल के उदाहरण जिनके लिए जगह की जानकारी का ऐक्सेस ज़रूरी है. जैसे, नेविगेशन और जगह की जानकारी शेयर करना.
- विकल्प
अगर उपयोगकर्ता किसी खास जगह पर पहुंचने पर आपके ऐप्लिकेशन को ट्रिगर करना है, तो इसके बजाय geofence API का इस्तेमाल करें.
मीडिया
- Foreground service type to declare in manifest under
android:foregroundServiceType
mediaPlayback
- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- Runtime prerequisites
- None
- Description
- Continue audio or video playback from the background. Support Digital Video Recording (DVR) functionality on Android TV.
- Alternatives
- If you're showing picture-in-picture video, use Picture-in-Picture mode.
मीडिया प्रोजेक्शन
- Foreground service type to declare in manifest under
android:foregroundServiceType
mediaProjection
- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION
- Constant to pass to
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- Runtime prerequisites
Call the
createScreenCaptureIntent()
method before starting the foreground service. Doing so shows a permission notification to the user; the user must grant the permission before you can create the service.After you have created the foreground service, you can call
MediaProjectionManager.getMediaProjection()
.- Description
Project content to non-primary display or external device using the
MediaProjection
APIs. This content doesn't have to be exclusively media content.- Alternatives
To stream media to another device, use the Google Cast SDK.
माइक्रोफ़ोन
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
microphone
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_MICROPHONE
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MICROPHONE
- रनटाइम की ज़रूरी शर्तें
RECORD_AUDIO
रनटाइम की अनुमति का अनुरोध करें और उसे मंज़ूरी पाएं.ध्यान दें:
RECORD_AUDIO
रनटाइम की अनुमति, इस्तेमाल के दौरान लागू होने वाली पाबंदियों के दायरे में आती है. इस वजह से, जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तबmicrophone
फ़ोरग्राउंड सेवा नहीं बनाई जा सकती. हालांकि, कुछ अपवादों के लिए ऐसा किया जा सकता है. ज़्यादा जानकारी के लिए, ऐसी फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियां जिनके लिए इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है देखें.- ब्यौरा
बैकग्राउंड में माइक्रोफ़ोन से आवाज़ रिकॉर्ड करना जारी रखना, जैसे कि वॉइस रिकॉर्डर या कम्यूनिकेशन ऐप्लिकेशन.
फ़ोन कॉल
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
phoneCall
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_PHONE_CALL
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_PHONE_CALL
- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त सही होनी चाहिए:
- ऐप्लिकेशन ने अपनी मेनिफ़ेस्ट फ़ाइल में
MANAGE_OWN_CALLS
अनुमति का एलान किया है.
- ऐप्लिकेशन ने अपनी मेनिफ़ेस्ट फ़ाइल में
- ऐप्लिकेशन,
ROLE_DIALER
भूमिका के ज़रिए डिफ़ॉल्ट डायलर ऐप्लिकेशन है.
- ऐप्लिकेशन,
- ब्यौरा
ConnectionService
एपीआई का इस्तेमाल करके, किसी मौजूदा कॉल को जारी रखना.- विकल्प
अगर आपको फ़ोन, वीडियो या VoIP कॉल करने हैं, तो
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
- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
सिस्टम ऐप्लिकेशन और खास सिस्टम इंटिग्रेशन के लिए, फ़ोरग्राउंड सेवाओं का इस्तेमाल जारी रखने के लिए.
इस टाइप का इस्तेमाल करने के लिए, ऐप्लिकेशन को इनमें से कम से कम एक शर्त पूरी करनी होगी:
- डिवाइस डेमो मोड में है
- ऐप्लिकेशन, डिवाइस का मालिक है
- ऐप्लिकेशन, प्रोफ़ाइलर का मालिक है
- Safety ऐप्लिकेशन, जिनके पास
ROLE_EMERGENCY
भूमिका है - डिवाइस एडमिन ऐप्लिकेशन
- ऐसे ऐप्लिकेशन जिनके पास
SCHEDULE_EXACT_ALARM
याUSE_EXACT_ALARM
अनुमति है और जो बैकग्राउंड में अलार्म जारी रखने के लिए, फ़ोरग्राउंड सेवा का इस्तेमाल कर रहे हैं. इनमें सिर्फ़ वाइब्रेशन वाले अलार्म भी शामिल हैं. वीपीएन ऐप्लिकेशन (सेटिंग > नेटवर्क और इंटरनेट > वीपीएन का इस्तेमाल करके कॉन्फ़िगर किए गए)
ऐसा न करने पर, इस टाइप का एलान करने पर सिस्टम से
ForegroundServiceTypeNotAllowedException
दिखता है.
फ़ोरग्राउंड सेवाओं के टाइप इस्तेमाल करने के लिए, Google Play की नीति को लागू करने का तरीका
अगर आपका ऐप्लिकेशन Android 14 या उसके बाद के वर्शन को टारगेट करता है, तो आपको Play Console के ऐप्लिकेशन कॉन्टेंट पेज (नीति > ऐप्लिकेशन कॉन्टेंट) पर, अपने ऐप्लिकेशन की फ़ोरग्राउंड सेवाओं के टाइप का एलान करना होगा. Play Console में फ़ोरग्राउंड सेवा के टाइप की जानकारी देने के तरीके के बारे में ज़्यादा जानने के लिए, फ़ोरग्राउंड सेवा और फ़ुल-स्क्रीन इंटेंट की ज़रूरी शर्तों के बारे में जानकारी देखें.