Android 12 (एपीआई लेवल 31) या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन, बैकग्राउंड में चलते समय फ़ोरग्राउंड
सेवाएं शुरू नहीं कर सकते. हालांकि, कुछ खास
मामलों में ऐसा किया जा सकता है. अगर कोई ऐप्लिकेशन, बैकग्राउंड में चलते समय फ़ोरग्राउंड सेवा शुरू करने की कोशिश करता है और वह फ़ोरग्राउंड सेवा, खास मामलों में से किसी एक की ज़रूरी शर्तें पूरी नहीं करती, तो सिस्टम ForegroundServiceStartNotAllowedException दिखाता है.
इसके अलावा, अगर कोई ऐप्लिकेशन ऐसी फ़ोरग्राउंड सेवा लॉन्च करना चाहता है जिसके लिए इस्तेमाल के दौरान की अनुमतियों की ज़रूरत होती है (उदाहरण के लिए, बॉडी सेंसर, कैमरा, माइक्रोफ़ोन या जगह की जानकारी की अनुमतियां), तो वह ऐप्लिकेशन बैकग्राउंड में चलते समय, उस सेवा को नहीं बना सकता. भले ही, वह ऐप्लिकेशन बैकग्राउंड में सेवा शुरू करने से जुड़ी पाबंदियों से छूट पाने की ज़रूरी शर्तें पूरी करता हो. इसकी वजह, इस्तेमाल के दौरान की अनुमतियों की ज़रूरत वाली फ़ोरग्राउंड सेवाओं को शुरू करने से जुड़ी पाबंदियों वाले सेक्शन में बताई गई है.
बैकग्राउंड में सेवा शुरू करने से जुड़ी पाबंदियों से छूट
यहां बताई गई स्थितियों में, आपका ऐप्लिकेशन बैकग्राउंड में चलते समय भी फ़ोरग्राउंड सेवाएं शुरू कर सकता है:
- आपका ऐप्लिकेशन, उपयोगकर्ता को दिखने वाली किसी स्थिति से ट्रांज़िशन करता है. जैसे, कोई गतिविधि.
- आपका ऐप्लिकेशन, बैकग्राउंड से कोई गतिविधि शुरू कर सकता है. हालांकि, ऐसा तब नहीं किया जा सकता, जब ऐप्लिकेशन में किसी मौजूदा टास्क की पिछली गतिविधियों में कोई गतिविधि मौजूद हो.
आपका ऐप्लिकेशन, Firebase क्लाउड से मैसेजिंग का इस्तेमाल करके, ज़्यादा प्राथमिकता वाला मैसेज पाता है.
उपयोगकर्ता, आपके ऐप्लिकेशन से जुड़े यूज़र इंटरफ़ेस (यूआई) एलिमेंट पर कोई कार्रवाई करता है. उदाहरण के लिए, वह बबल, सूचना, विजेट या गतिविधि के साथ इंटरैक्ट कर सकता है.
उपयोगकर्ता के अनुरोध पर कोई कार्रवाई पूरी करने के लिए, आपका ऐप्लिकेशन एग्ज़ैक्ट अलार्म को कॉल करता है.
आपका ऐप्लिकेशन, डिवाइस का मौजूदा इनपुट तरीका है.
आपका ऐप्लिकेशन, ऐसा इवेंट पाता है जो जियोफ़ेंसिंग या गतिविधि की पहचान के ट्रांज़िशन से जुड़ा है.
डिवाइस के रीबूट होने और ब्रॉडकास्ट रिसीवर में
ACTION_BOOT_COMPLETED,ACTION_LOCKED_BOOT_COMPLETED, याACTION_MY_PACKAGE_REPLACEDइंटेंट कार्रवाई मिलने के बाद.BOOT_COMPLETEDआपका ऐप्लिकेशन, ब्रॉडकास्ट रिसीवर में
ACTION_TIMEZONE_CHANGED,ACTION_TIME_CHANGED, याACTION_LOCALE_CHANGEDइंटेंट कार्रवाई पाता है.आपका ऐप्लिकेशन,
NfcServiceसेACTION_TRANSACTION_DETECTEDइवेंट पाता है.कुछ सिस्टम रोल या अनुमतियों वाले ऐप्लिकेशन. जैसे, डिवाइस के मालिक और प्रोफ़ाइल के मालिक.
आपका ऐप्लिकेशन, कंपैनियन डिवाइस मैनेजर का इस्तेमाल करता है और
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 अगर आपके पास वह अनुमति नहीं है, तो सिस्टम a
SecurityException दिखाता है.
इस्तेमाल के दौरान की अनुमतियों के लिए, इससे संभावित समस्या हो सकती है. अगर आपके ऐप्लिकेशन के पास इस्तेमाल के दौरान की
अनुमति है, तो उसके पास वह अनुमति सिर्फ़ तब होती है, जब वह फ़ोरग्राउंड में हो. इसका मतलब है कि अगर आपका ऐप्लिकेशन बैकग्राउंड में है और वह कैमरा, जगह की जानकारी या माइक्रोफ़ोन टाइप की फ़ोरग्राउंड सेवा बनाने की कोशिश करता है, तो सिस्टम को पता चलता है कि आपके ऐप्लिकेशन के पास फ़िलहाल ज़रूरी अनुमतियां नहीं हैं. इसके बाद, वह SecurityException दिखाता है.
इसी तरह, अगर आपका ऐप्लिकेशन बैकग्राउंड में है और वह सेहत से जुड़ी कोई ऐसी सेवा बनाता है जिसके लिए BODY_SENSORS अनुमति की ज़रूरत होती है, तो ऐप्लिकेशन के पास फ़िलहाल वह अनुमति नहीं होती. इसके बाद, सिस्टम एक अपवाद दिखाता है.
(यह तब लागू नहीं होता, जब वह सेहत से जुड़ी कोई ऐसी सेवा हो जिसके लिए अलग-अलग अनुमतियों की ज़रूरत होती है,
जैसे ACTIVITY_RECOGNITION.) Calling
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