Android 14 (एपीआई लेवल 34) से, आपको हर फ़ोरग्राउंड सेवा के लिए, सेवा के सही टाइप का एलान करना होगा. इसका मतलब है कि आपको अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में सेवा के टाइप का एलान करना होगा. साथ ही, उस टाइप के लिए फ़ोरग्राउंड सेवा की सही अनुमति का अनुरोध करना होगा. इसके अलावा, आपको FOREGROUND_SERVICE अनुमति का अनुरोध भी करना होगा. इसके अलावा, फ़ोरग्राउंड सेवा के टाइप के आधार पर, हो सकता है कि आपको सेवा लॉन्च करने से पहले, रनटाइम अनुमतियों का अनुरोध करना पड़े.
कैमरा
android:foregroundServiceTypeमें मेनिफ़ेस्ट में फ़ोरग्राउंड सेवा का टाइप तय करनाcamera- मेनिफ़ेस्ट में अनुमति का एलान करना
FOREGROUND_SERVICE_CAMERAstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CAMERA- रनटाइम की ज़रूरी शर्तें
CAMERAरनटाइम अनुमति का अनुरोध करना और उसे स्वीकार किया जाना- ब्यौरा
इसका इस्तेमाल करके, बैकग्राउंड में कैमरे को ऐक्सेस करना जारी रखा जा सकता है. जैसे, ऐसे वीडियो चैट ऐप्लिकेशन जो मल्टीटास्किंग (एक साथ कई काम करना) की सुविधा देते हैं.
कनेक्ट किया गया डिवाइस
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTypeconnectedDevice- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_CONNECTED_DEVICEstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- रनटाइम की ज़रूरी शर्तें
इनमें से कम से कम एक शर्त पूरी होनी चाहिए:
अपने मेनिफ़ेस्ट में, इनमें से कम से कम एक अनुमति का एलान करें:
इनमें से कम से कम एक रनटाइम अनुमति का अनुरोध करें और उसे मंज़ूरी पाएं:
UsbManager.requestPermission()को कॉल करें
- ब्यौरा
बाहरी डिवाइसों के साथ इंटरैक्शन, जिनके लिए ब्लूटूथ, एनएफ़सी, आईआर, यूएसबी या इंटरनेट की ज़रूरत होती है.
- विकल्प
अगर आपके ऐप्लिकेशन को किसी बाहरी डिवाइस पर लगातार डेटा ट्रांसफ़र करना है, तो इसके बजाय साथी डिवाइस मैनेजर का इस्तेमाल करें. साथी डिवाइस के मौजूद होने की जानकारी देने वाले एपीआई का इस्तेमाल करें, ताकि साथी डिवाइस की रेंज में रहने पर आपका ऐप्लिकेशन चालू रहे.
अगर आपके ऐप्लिकेशन को ब्लूटूथ डिवाइसों को स्कैन करना है, तो इसके बजाय ब्लूटूथ स्कैन एपीआई का इस्तेमाल करें.
डेटा सिंक करना
- मेनिफ़ेस्ट में इस फ़ोरग्राउंड सेवा के टाइप का एलान करें
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()को कॉल कर सकते हैं.- ब्यौरा
कॉन्टेंट को नॉन-प्राइमरी डिसप्ले या बाहरी डिवाइस पर प्रोजेक्ट करने के लिए,
MediaProjectionAPI का इस्तेमाल करें. ज़रूरी नहीं कि यह कॉन्टेंट सिर्फ़ मीडिया कॉन्टेंट हो.- विकल्प
किसी दूसरे डिवाइस पर मीडिया स्ट्रीम करने के लिए, Google Cast SDK का इस्तेमाल करें.
BOOT_COMPLETED
माइक्रोफ़ोन
- मेनिफ़ेस्ट में इस फ़ोरग्राउंड सेवा के टाइप का एलान करें
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का इस्तेमाल करें.
रिमोट मैसेज सेवा
- मेनिफ़ेस्ट में जाकर, फ़ोरग्राउंड सेवा के टाइप की जानकारी दें. इसके लिए,
android:foregroundServiceTyperemoteMessaging- अपने मेनिफ़ेस्ट में एलान करने की अनुमति
FOREGROUND_SERVICE_REMOTE_MESSAGINGstartForeground()को पास करने के लिए कॉन्स्टेंटFOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- रनटाइम की ज़रूरी शर्तें
- कोई नहीं
- ब्यौरा
- मैसेज को एक डिवाइस से दूसरे डिवाइस पर ट्रांसफ़र करना. जब उपयोगकर्ता एक डिवाइस पर किसी बातचीत को अधूरा छोड़कर किसी अन्य डिवाइस से मैसेज करने लगता है, तो इस सेवा की मदद से बातचीत वहीं से शुरू की जा सकती है जहां पर उपयोगकर्ता ने छोड़ी थी.
शॉर्ट सर्विस
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypeshortService- 在清单中声明的权限
- 无
- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_SHORT_SERVICE- 运行时前提条件
- 无
- 说明
快速完成不可中断或推迟的关键工作。
这种类型有一些独特的特征:
- 只能持续运行一小段时间(大约 3 分钟)。
- 不支持粘性前台服务。
- 无法启动其他前台服务。
- 不需要类型专用权限,不过它仍需要
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()回调被视为一种最佳实践。Android 13 及更低版本中不存在
Service.onTimeout()回调。如果同一服务在此类设备上运行,则不会出现超时,也不会发生 ANR。确保您的服务在完成处理任务后立即停止,即使它尚未收到Service.onTimeout()回调也是如此。请务必注意,如果未遵循
shortService的超时设置,即使应用还有其他有效的前台服务或其他应用生命周期进程,应用也会遇到 ANR。如果应用对用户可见,或满足允许从后台启动前台服务的某一豁免条件,则使用
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE参数再次调用Service.StartForeground()会将超时时间再延长 3 分钟。如果应用对用户不可见且不满足其中一个豁免条件,则尝试启动其他前台服务(无论其类型如何)都会导致ForegroundServiceStartNotAllowedException。即使用户为您的应用停用电池优化功能,仍然会受到 shortService FGS 的影响。
如果您启动包含
shortService类型和另一个前台服务类型的前台服务,系统会忽略shortService类型声明。不过,该服务仍必须遵守其他声明类型的先决条件。如需了解详情,请参阅前台服务文档。
खास इस्तेमाल
- मेनिफ़ेस्ट में जानकारी देने के लिए, फ़ोरग्राउंड सेवा का टाइप
android:foregroundServiceTypespecialUse- अपने मेनिफ़ेस्ट में जानकारी देने की अनुमति
FOREGROUND_SERVICE_SPECIAL_USEstartForeground()को पास करने के लिए कॉन्स्टेंट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: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 में फ़ोरग्राउंड सेवा के टाइप की जानकारी देने के तरीके के बारे में ज़्यादा जानने के लिए, फ़ोरग्राउंड सेवा और फ़ुल-स्क्रीन इंटेंट की ज़रूरी शर्तों के बारे में जानकारी देखें.