फ़ोरग्राउंड सेवा के टाइप चुनना ज़रूरी है

Android 10 में <service> एलिमेंट में android:foregroundServiceType एट्रिब्यूट को जोड़ा गया है. इससे, डेवलपर को उपयोगकर्ताओं के लिए फ़ोरग्राउंड सेवाओं को बेहतर तरीके से तय करने में मदद मिलती है.

अगर आपका ऐप्लिकेशन Android 14 को टारगेट करता है, तो उसमें फ़ोरग्राउंड सेवा के सही टाइप बताने चाहिए. Android के पिछले वर्शन की तरह, कई तरह के टाइप को जोड़ा जा सकता है. इस सूची में, फ़ोरग्राउंड सेवा के टाइप दिखाए गए हैं, जिनमें से किसी एक को चुना जा सकता है:

अगर आपके ऐप्लिकेशन में इस्तेमाल का कोई उदाहरण इनमें से किसी भी तरह से जुड़ा हुआ नहीं है, तो हमारा सुझाव है कि आप 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
रनटाइम की ज़रूरी शर्तें

इनमें से कम से कम एक शर्त पूरी होनी चाहिए:

ब्यौरा

बाहरी डिवाइसों के साथ इंटरैक्शन, जिनके लिए ब्लूटूथ, एनएफ़सी, आईआर, यूएसबी या इंटरनेट की ज़रूरत होती है.

विकल्प

अगर आपके ऐप्लिकेशन को किसी बाहरी डिवाइस पर लगातार डेटा ट्रांसफ़र करना है, तो इसके बजाय साथी डिवाइस मैनेजर का इस्तेमाल करें. साथी डिवाइस के मौजूद होने की जानकारी देने वाले एपीआई का इस्तेमाल करें, ताकि साथी डिवाइस की रेंज में रहने पर आपका ऐप्लिकेशन चालू रहे.

अगर आपके ऐप्लिकेशन को ब्लूटूथ डिवाइसों को स्कैन करना है, तो इसके बजाय ब्लूटूथ स्कैन एपीआई का इस्तेमाल करें.

डेटा सिंक करना

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:

Note: The BODY_SENSORS and sensor-based READ runtime permissions are subject to while-in-use restrictions. For this reason, you cannot create a health foreground service that uses body sensors while your app is in the background unless you've been granted the BODY_SENSORS_BACKGROUND (API level 33 to 35) or READ_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 में फ़ोरग्राउंड सेवा के टाइप की जानकारी देने के तरीके के बारे में ज़्यादा जानने के लिए, फ़ोरग्राउंड सेवा और फ़ुल-स्क्रीन इंटेंट की ज़रूरी शर्तों के बारे में जानकारी देखें.