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इवेंट पाता है.ऐसे ऐप्लिकेशन जिनके पास सिस्टम की कुछ भूमिकाएं या अनुमतियां हैं. जैसे, डिवाइस के मालिक और प्रोफ़ाइल के मालिक.
आपका ऐप्लिकेशन, 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 अगर आपके पास वह अनुमति नहीं है, तो सिस्टम a
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