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
को दिखाएगा.
声明新权限来使用前台服务类型
अगर 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_CAMERA
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CAMERA
- रनटाइम की ज़रूरी शर्तें
CAMERA
रनटाइम की अनुमति का अनुरोध करना और उसे पानाध्यान दें:
CAMERA
रनटाइम की अनुमति, इस्तेमाल के दौरान लागू होने वाली पाबंदियों के दायरे में आती है. इस वजह से, जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तबcamera
फ़ोरग्राउंड सेवा नहीं बनाई जा सकती. हालांकि, कुछ अपवादों के लिए ऐसा किया जा सकता है. ज़्यादा जानकारी के लिए, ऐसी फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियां जिनके लिए इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है देखें.- ब्यौरा
इसका इस्तेमाल करके, बैकग्राउंड में कैमरे को ऐक्सेस करना जारी रखा जा सकता है. जैसे, ऐसे वीडियो चैट ऐप्लिकेशन जो मल्टीटास्किंग (एक साथ कई काम करना) की सुविधा देते हैं.
连接的设备
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
connectedDevice
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_CONNECTED_DEVICE
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त पूरी होनी चाहिए:
अपने मेनिफ़ेस्ट में, इनमें से कम से कम एक अनुमति का एलान करें:
इनमें से कम से कम एक रनटाइम अनुमति का अनुरोध करें और उसे मंज़ूरी पाएं:
UsbManager.requestPermission()
को कॉल करें
- ब्यौरा
बाहरी डिवाइसों के साथ इंटरैक्शन, जिनके लिए ब्लूटूथ, एनएफ़सी, आईआर, यूएसबी या इंटरनेट की ज़रूरत होती है.
- विकल्प
अगर आपके ऐप्लिकेशन को किसी बाहरी डिवाइस पर लगातार डेटा ट्रांसफ़र करना है, तो इसके बजाय साथी डिवाइस मैनेजर का इस्तेमाल करें. साथी डिवाइस के मौजूद होने की जानकारी देने वाले एपीआई का इस्तेमाल करें, ताकि साथी डिवाइस की रेंज में रहने पर आपका ऐप्लिकेशन चालू रहे.
अगर आपके ऐप्लिकेशन को ब्लूटूथ डिवाइसों को स्कैन करना है, तो इसके बजाय ब्लूटूथ स्कैन एपीआई का इस्तेमाल करें.
数据同步
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
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
की अनुमति का एलान करें.इनमें से कम से कम एक रनटाइम अनुमति का अनुरोध करें और उसे मंज़ूरी पाएं:
ध्यान दें:
BODY_SENSORS
रनटाइम की अनुमति, इस्तेमाल के दौरान लागू होने वाली पाबंदियों के दायरे में आती है. इस वजह से, आपके पासhealth
फ़ोरग्राउंड सेवा बनाने का विकल्प नहीं है. यह सेवा, आपके ऐप्लिकेशन के बैकग्राउंड में होने पर, बॉडी सेंसर का इस्तेमाल करती है. हालांकि, कुछ अपवादों के साथ ऐसा किया जा सकता है. ज़्यादा जानकारी के लिए, ऐसी फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियां जिनके लिए इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है देखें.- ब्यौरा
फ़िटनेस कैटगरी के ऐप्लिकेशन के साथ काम करने के लिए, लंबे समय से इस्तेमाल किए जा रहे उदाहरण. जैसे, कसरत ट्रैकर.
位置
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
location
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_LOCATION
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_LOCATION
- रनटाइम की ज़रूरी शर्तें
उपयोगकर्ता ने जगह की जानकारी की सेवाएं चालू की हों और ऐप्लिकेशन को इनमें से कम से कम एक रनटाइम अनुमति दी गई हो:
ध्यान दें: यह देखने के लिए कि उपयोगकर्ता ने जगह की जानकारी की सेवाओं को चालू किया है या नहीं और साथ ही, रनटाइम की अनुमतियों का ऐक्सेस दिया है या नहीं,
PermissionChecker#checkSelfPermission()
का इस्तेमाल करेंध्यान दें: जगह की जानकारी की रनटाइम अनुमतियां, इस्तेमाल के दौरान लागू होने वाली पाबंदियों के दायरे में आती हैं. इस वजह से, जब आपका ऐप्लिकेशन बैकग्राउंड में हो, तब
location
फ़ोरग्राउंड सेवा नहीं बनाई जा सकती. ऐसा तब तक नहीं किया जा सकता, जब तक आपकोACCESS_BACKGROUND_LOCATION
रनटाइम की अनुमति न मिल जाए. ज़्यादा जानकारी के लिए, ऐसी फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियां जिनके लिए इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है देखें.- ब्यौरा
लंबे समय तक चलने वाले ऐसे इस्तेमाल के उदाहरण जिनके लिए जगह की जानकारी का ऐक्सेस ज़रूरी है. जैसे, नेविगेशन और जगह की जानकारी शेयर करना.
- विकल्प
अगर उपयोगकर्ता किसी खास जगह पर पहुंचने पर आपके ऐप्लिकेशन को ट्रिगर करना है, तो इसके बजाय geofence API का इस्तेमाल करें.
媒体
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
mediaPlayback
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_MEDIA_PLAYBACK
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
- ऑडियो या वीडियो को बैकग्राउंड में चलाना जारी रखें. Android TV पर डिजिटल वीडियो रिकॉर्डिंग (डीवीआर) की सुविधा काम करती हो.
- विकल्प
- अगर पिक्चर में पिक्चर मोड में वीडियो दिखाया जा रहा है, तो पिक्चर में पिक्चर मोड का इस्तेमाल करें.
媒体投影
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceType
mediaProjection
- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_MEDIA_PROJECTION
startForeground()
को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- रनटाइम की ज़रूरी शर्तें
फ़ोरग्राउंड सेवा शुरू करने से पहले,
createScreenCaptureIntent()
तरीके को कॉल करें. ऐसा करने पर, उपयोगकर्ता को अनुमति की सूचना दिखती है. सेवा बनाने से पहले, उपयोगकर्ता को अनुमति देनी होगी.फ़ोरग्राउंड सेवा बनाने के बाद,
MediaProjectionManager.getMediaProjection()
को कॉल किया जा सकता है.- ब्यौरा
MediaProjection
एपीआई का इस्तेमाल करके, कॉन्टेंट को नॉन-प्राइमरी डिसप्ले या बाहरी डिवाइस पर प्रोजेक्ट करें. यह ज़रूरी नहीं है कि यह कॉन्टेंट सिर्फ़ मीडिया कॉन्टेंट हो.- विकल्प
किसी दूसरे डिवाइस पर मीडिया स्ट्रीम करने के लिए, 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 में फ़ोरग्राउंड सेवा के टाइप की जानकारी देने के तरीके के बारे में ज़्यादा जानने के लिए, फ़ोरग्राउंड सेवा और फ़ुल-स्क्रीन इंटेंट की ज़रूरी शर्तों के बारे में जानकारी देखें.