Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन, बैकग्राउंड में चलते समय फ़ोरग्राउंड सेवाएं शुरू नहीं कर सकते. हालांकि, कुछ खास मामलों में ऐसा किया जा सकता है. अगर कोई ऐप्लिकेशन बैकग्राउंड में चलने के दौरान फ़ोरग्राउंड सेवा शुरू करने की कोशिश करता है और फ़ोरग्राउंड सेवा, अपवाद के किसी भी मामले की ज़रूरी शर्तें पूरी नहीं करती है, तो सिस्टम ForegroundServiceStartNotAllowedException दिखाता है.
इसके अलावा, अगर किसी ऐप्लिकेशन को ऐसी फ़ोरग्राउंड सेवा लॉन्च करनी है जिसके लिए इस्तेमाल के दौरान की अनुमतियों की ज़रूरत होती है (उदाहरण के लिए, बॉडी सेंसर, कैमरा, माइक्रोफ़ोन या जगह की जानकारी ऐक्सेस करने की अनुमतियां), तो ऐप्लिकेशन के बैकग्राउंड में होने पर, वह सेवा बनाई नहीं जा सकती. भले ही, ऐप्लिकेशन बैकग्राउंड में शुरू होने से जुड़ी पाबंदियों से छूट पाने की किसी कैटगरी में आता हो. इसकी वजह, फ़ोरग्राउंड सेवाओं को शुरू करने पर पाबंदियां, जिन्हें इस्तेमाल के दौरान अनुमति की ज़रूरत होती है सेक्शन में बताई गई है.
बैकग्राउंड से ऐक्टिविटी शुरू करने से जुड़ी पाबंदियों से छूट
यहां दी गई स्थितियों में, आपका ऐप्लिकेशन बैकग्राउंड में चलने के दौरान भी फ़ोरग्राउंड सेवाएं शुरू कर सकता है:
- आपका ऐप्लिकेशन, उपयोगकर्ता को दिखने वाली स्थिति से ट्रांज़िशन करता है. जैसे, गतिविधि.
- आपका ऐप्लिकेशन बैकग्राउंड से कोई गतिविधि शुरू कर सकता है. हालांकि, ऐसा तब नहीं किया जा सकता, जब ऐप्लिकेशन के पास किसी मौजूदा टास्क के बैक स्टैक में कोई गतिविधि हो.
आपके ऐप्लिकेशन को Firebase Cloud Messaging का इस्तेमाल करके, ज़्यादा प्राथमिकता वाला मैसेज मिलता है.
उपयोगकर्ता, आपके ऐप्लिकेशन से जुड़े यूज़र इंटरफ़ेस (यूआई) एलिमेंट पर कोई कार्रवाई करता है. उदाहरण के लिए, वह बबल, सूचना, विजेट या गतिविधि से इंटरैक्ट कर सकता है.
आपका ऐप्लिकेशन, उपयोगकर्ता के अनुरोध पर कोई कार्रवाई पूरी करने के लिए एग्ज़ैक्ट अलार्म चालू करता है.
आपका ऐप्लिकेशन, डिवाइस का मौजूदा इनपुट मेथड है.
आपके ऐप्लिकेशन को जियोफ़ेंसिंग या गतिविधि पहचानने की सुविधा के ट्रांज़िशन से जुड़ा कोई इवेंट मिलता है.
डिवाइस रीबूट होने के बाद, ब्रॉडकास्ट रिसीवर में
देखें.ACTION_BOOT_COMPLETED,ACTION_LOCKED_BOOT_COMPLETEDयाACTION_MY_PACKAGE_REPLACEDइंटेंट ऐक्शन मिलता है.आपका ऐप्लिकेशन, ब्रॉडकास्ट रिसीवर में
ACTION_TIMEZONE_CHANGED,ACTION_TIME_CHANGEDयाACTION_LOCALE_CHANGEDइंटेंट ऐक्शन को स्वीकार करता है.आपके ऐप्लिकेशन को
NfcServiceसेACTION_TRANSACTION_DETECTEDइवेंट मिलता है.कुछ सिस्टम भूमिकाओं या अनुमतियों वाले ऐप्लिकेशन, जैसे कि डिवाइस के मालिक और प्रोफ़ाइल के मालिक.
आपका ऐप्लिकेशन, Companion Device Manager का इस्तेमाल करता है और
REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUNDयाREQUEST_COMPANION_RUN_IN_BACKGROUNDअनुमति का एलान करता है. जब भी मुमकिन हो,REQUEST_COMPANION_START_FOREGROUND_SERVICES_FROM_BACKGROUNDका इस्तेमाल करें.जब उपयोगकर्ता आपके ऐप्लिकेशन के लिए बैटरी ऑप्टिमाइज़ेशन की सुविधा बंद कर देता है.
आपके ऐप्लिकेशन के पास
SYSTEM_ALERT_WINDOWअनुमति है. ध्यान दें: अगर आपका ऐप्लिकेशन Android 15 या उसके बाद के वर्शन को टारगेट करता है, तो उसके पासSYSTEM_ALERT_WINDOWअनुमति होनी चाहिए और ऐप्लिकेशन में फ़िलहाल दिखने वाली ओवरले विंडो होनी चाहिए.
फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियां, जिनके लिए ऐप्लिकेशन इस्तेमाल करने के दौरान की अनुमतियों की ज़रूरत होती है
अगर आपको Android 14 (एपीआई लेवल 34) या इसके बाद के वर्शन पर, फ़ोरग्राउंड सेवा शुरू करनी है और इसके लिए 'इस्तेमाल के दौरान' अनुमति की ज़रूरत है, तो आपको कुछ खास बातों का ध्यान रखना होगा.
अगर आपका ऐप्लिकेशन, Android 14 या इसके बाद के वर्शन को टारगेट करता है, तो ऑपरेटिंग सिस्टम यह जांच करता है कि फ़ोरग्राउंड सेवा बनाते समय, आपके ऐप्लिकेशन के पास उस सेवा के टाइप के लिए सभी ज़रूरी अनुमतियां हैं या नहीं. उदाहरण के लिए, जब माइक्रोफ़ोन टाइप की फ़ोरग्राउंड सेवा बनाई जाती है, तब ऑपरेटिंग सिस्टम यह पुष्टि करता है कि आपके ऐप्लिकेशन के पास फ़िलहाल RECORD_AUDIO की अनुमति है. अगर आपके पास यह अनुमति नहीं है, तो सिस्टम SecurityException दिखाता है.
'इस्तेमाल के दौरान' की अनुमतियों के लिए, इससे समस्या हो सकती है. अगर आपके ऐप्लिकेशन के पास "इस्तेमाल के दौरान" अनुमति है, तो उसके पास यह अनुमति सिर्फ़ तब होती है, जब वह फ़ोरग्राउंड में हो. इसका मतलब है कि अगर आपका ऐप्लिकेशन बैकग्राउंड में है और वह कैमरा, जगह की जानकारी या माइक्रोफ़ोन टाइप की फ़ोरग्राउंड सेवा बनाने की कोशिश करता है, तो सिस्टम यह देखता है कि आपके ऐप्लिकेशन के पास फ़िलहाल ज़रूरी अनुमतियां नहीं हैं. इसके बाद, वह SecurityException दिखाता है.
इसी तरह, अगर आपका ऐप्लिकेशन बैकग्राउंड में चल रहा है और वह ऐसी स्वास्थ्य सेवा बनाता है जिसके लिए BODY_SENSORS अनुमति की ज़रूरत होती है, तो ऐप्लिकेशन के पास फ़िलहाल वह अनुमति नहीं है. ऐसे में, सिस्टम एक अपवाद दिखाता है.
(अगर यह सेहत से जुड़ी कोई ऐसी सेवा है जिसके लिए अलग-अलग अनुमतियों की ज़रूरत होती है, तो यह लागू नहीं होता. जैसे, ACTIVITY_RECOGNITION.) कॉल करने से
PermissionChecker.checkSelfPermission()
यह समस्या ठीक नहीं होती. अगर आपके ऐप्लिकेशन के पास 'इस्तेमाल के दौरान' अनुमति है और वह यह देखने के लिए checkSelfPermission() को कॉल करता है कि उसके पास यह अनुमति है या नहीं, तो यह तरीका PERMISSION_GRANTED दिखाता है. भले ही, ऐप्लिकेशन बैकग्राउंड में चल रहा हो. जब यह तरीका PERMISSION_GRANTED दिखाता है, तो इसका मतलब है कि "आपके ऐप्लिकेशन के पास ऐप्लिकेशन इस्तेमाल करते समय यह अनुमति है."
इस वजह से, अगर आपकी फ़ोरग्राउंड सेवा को 'इस्तेमाल के दौरान' अनुमति की ज़रूरत है, तो आपको Context.startForegroundService() या Context.bindService() को कॉल करना होगा. ऐसा तब तक करना होगा, जब तक आपका ऐप्लिकेशन कोई गतिविधि दिखा रहा हो. हालांकि, अगर सेवा तय की गई छूट में से किसी एक में आती है, तो ऐसा करने की ज़रूरत नहीं है.
ऐप्लिकेशन इस्तेमाल करने के दौरान दी जाने वाली अनुमतियों पर लगी पाबंदियों से छूट
कुछ स्थितियों में, ऐप्लिकेशन के बैकग्राउंड में चलने के दौरान फ़ोरग्राउंड सेवा शुरू होने पर भी, ऐप्लिकेशन को जगह की जानकारी, कैमरे, और माइक्रोफ़ोन की जानकारी को ऐक्सेस करने की अनुमति मिल सकती है. ऐसा तब होता है, जब ऐप्लिकेशन फ़ोरग्राउंड में चल रहा हो ("इस्तेमाल के दौरान").
इन स्थितियों में, अगर सेवा location का फ़ोरग्राउंड सेवा टाइप
डिक्लेयर करती है और इसे ऐसे ऐप्लिकेशन से शुरू किया जाता है जिसके पास ACCESS_BACKGROUND_LOCATION अनुमति है, तो यह सेवा हर समय जगह की जानकारी ऐक्सेस कर सकती है. भले ही, ऐप्लिकेशन बैकग्राउंड में चल रहा हो.
यहां दी गई सूची में इन स्थितियों के बारे में बताया गया है:
- सिस्टम कॉम्पोनेंट, सेवा शुरू करता है.
- यह सेवा, ऐप्लिकेशन विजेट के साथ इंटरैक्ट करके शुरू होती है.
- इस सेवा का इस्तेमाल, सूचना पर टैप करके शुरू किया जाता है.
- यह सेवा,
PendingIntentके तौर पर शुरू होती है. इसे किसी दूसरे ऐप्लिकेशन से भेजा जाता है. - यह सेवा, डिवाइस के मालिक के मोड में चलने वाले डिवाइस नीति नियंत्रक ऐप्लिकेशन से शुरू होती है.
- यह सेवा,
VoiceInteractionServiceउपलब्ध कराने वाले ऐप्लिकेशन से शुरू होती है. - यह सेवा, उस ऐप्लिकेशन से शुरू होती है जिसके पास
START_ACTIVITIES_FROM_BACKGROUNDकी खास अनुमति होती है.
यह पता लगाना कि आपके ऐप्लिकेशन में किन सेवाओं पर असर पड़ा है
अपने ऐप्लिकेशन की टेस्टिंग करते समय, उसकी फ़ोरग्राउंड सेवाएं शुरू करें. अगर किसी चालू सेवा के लिए, जगह की जानकारी, माइक्रोफ़ोन, और कैमरे का ऐक्सेस सीमित है, तो Logcat में यह मैसेज दिखता है:
Foreground service started from background can not have \ location/camera/microphone access: service SERVICE_NAME