फ़ोरग्राउंड सेवाएं

फ़ोरग्राउंड सेवाएं ऐसी कार्रवाइयां करती हैं जो उपयोगकर्ताओं को दिखती हैं.

फ़ोरग्राउंड सेवाओं में, स्टेटस बार दिखता है सूचना भेजी जाएगी, ताकि उपयोगकर्ताओं को यह पता चल सके कि आपके ऐप्लिकेशन, फ़ोरग्राउंड में कोई टास्क कर रहा है और सिस्टम के संसाधनों का इस्तेमाल कर रहा है.

फ़ोरग्राउंड सेवाओं का इस्तेमाल करने वाले ऐप्लिकेशन के उदाहरणों में ये शामिल हैं:

  • म्यूज़िक प्लेयर ऐप्लिकेशन, जो फ़ोरग्राउंड सेवा में संगीत चलाता है. सूचना चलाए जा रहे मौजूदा गाने को दिखा सकती है.
  • ऐसा फ़िटनेस ऐप्लिकेशन जो उपयोगकर्ता की फ़ोरग्राउंड सेवा में की गई उसकी गतिविधि को रिकॉर्ड करता है उपयोगकर्ता से अनुमति नहीं ले रहा है. सूचना में दूरी की जानकारी दिख सकती है क्या उपयोगकर्ता ने मौजूदा फ़िटनेस सेशन के दौरान यात्रा की है.

फ़ोरग्राउंड सेवा का इस्तेमाल सिर्फ़ तब करें, जब आपके ऐप्लिकेशन को कोई टास्क करना हो जो उपयोगकर्ता को आसानी से दिखें. भले ही, वे उपयोगकर्ता के साथ सीधे तौर पर इंटरैक्ट न कर रहे हों ऐप खोलें. अगर कार्रवाई आपके लिए ज़्यादा ज़रूरी नहीं है, तो कम से कम प्राथमिकता वाली सूचना, बैकग्राउंड बनाएं Tasks का इस्तेमाल करें.

इस दस्तावेज़ में फ़ोरग्राउंड सेवाओं का इस्तेमाल करने के लिए ज़रूरी अनुमति की जानकारी दी गई है. फ़ोरग्राउंड सेवा को शुरू करने और उसे बैकग्राउंड से हटाने का तरीका भी बताया गया है. यह भी फ़ोरग्राउंड सेवा के टाइप के साथ, इस्तेमाल के कुछ उदाहरणों को जोड़ने का तरीका बताया गया है. ऐक्सेस से जुड़ी पाबंदियां, जो फ़ोरग्राउंड सेवा शुरू करने पर लागू होती हैं बैकग्राउंड में चल रहे किसी ऐप्लिकेशन से.

उपयोगकर्ता डिफ़ॉल्ट रूप से सूचना को खारिज कर सकते हैं

Android 13 (एपीआई लेवल 33) की शुरुआत के बाद, उपयोगकर्ता सूचना को खारिज कर सकते हैं यह डिफ़ॉल्ट रूप से फ़ोरग्राउंड सेवा से जुड़ा होता है. ऐसा करने के लिए, उपयोगकर्ता एक स्वाइप करते हैं नोटिफ़िकेशन पर जेस्चर का उपयोग करें. आम तौर पर, सूचना फ़ोरग्राउंड सेवा को बंद किए जाने या हटाए जाने तक, उसे ख़ारिज नहीं किया जा सकता का इस्तेमाल किया जा सकता है.

अगर आप चाहते हैं कि उपयोगकर्ता सूचना को खारिज न कर सके, तो true, setOngoing() में विधि को चुनना होगा.Notification.Builder

ऐसी सेवाएं जो तुरंत सूचना दिखाती हैं

अगर फ़ोरग्राउंड सेवा की इनमें से कम से कम कोई एक खासियत है, तो सिस्टम, सेवा शुरू होने के तुरंत बाद इससे जुड़ी सूचना दिखाता है, Android 12 या उसके बाद के वर्शन वाले डिवाइसों पर भी:

Android 13 (एपीआई लेवल 33) या उसके बाद के वर्शन पर, अगर उपयोगकर्ता सूचना की अनुमति, उन्हें अब भी फ़ोरग्राउंड सेवाओं से जुड़ी सूचनाएं टास्क मैनेजर लेकिन उन्हें नोटिफ़िकेशन पैनल में नहीं देखा जा सकता.

अपने मेनिफ़ेस्ट में फ़ोरग्राउंड सेवाओं के बारे में बताएं

अपने ऐप्लिकेशन के मेनिफ़ेस्ट में, अपने ऐप्लिकेशन के हर फ़ोरग्राउंड सेवा के बारे में जानकारी दें <service> के साथ एलिमेंट. हर सेवा के लिए, android:foregroundServiceType एट्रिब्यूट ताकि यह एलान किया जा सके कि यह सेवा किस तरह का काम करती है.

उदाहरण के लिए, अगर आपका ऐप्लिकेशन ऐसी फ़ोरग्राउंड सेवा बनाता है जिसमें संगीत चलाया जाता है, तो इस तरह की सेवा का एलान कर सकते हैं:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
  <application ...>

    <service
        android:name=".MyMediaPlaybackService"
        android:foregroundServiceType="mediaPlayback"
        android:exported="false">
    </service>
  </application>
</manifest>

अगर आपकी सेवा पर एक से ज़्यादा तरह के विकल्प लागू होते हैं, तो उन्हें | से अलग करें ऑपरेटर का इस्तेमाल करें. उदाहरण के लिए, कैमरे और माइक्रोफ़ोन का इस्तेमाल करने वाली कोई सेवा इसे इस तरह से एलान करेगा:

android:foregroundServiceType="camera|microphone"

फ़ोरग्राउंड सेवा की अनुमतियों का अनुरोध करें

ऐसे ऐप्लिकेशन जो Android 9 (एपीआई लेवल 28) या उसके बाद के वर्शन को टारगेट करते हैं और फ़ोरग्राउंड सेवाओं का इस्तेमाल करते हैं को नए ग्राहक बनाने के लिए FOREGROUND_SERVICE जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है. यह एक सामान्य घटना है की अनुमति है, इसलिए सिस्टम अनुरोध करने वाले ऐप्लिकेशन को अपने-आप भेज देता है.

इसके अलावा, अगर ऐप्लिकेशन, एपीआई लेवल 34 या उसके बाद के लेवल को टारगेट करता है, तो उसे जिस तरह के काम के लिए फ़ोरग्राउंड सेवा इस्तेमाल की जाएगी उसके लिए अनुमति का सही टाइप कर रहे हैं. हर फ़ोरग्राउंड सेवा का टाइप पास संबंधित अनुमति प्रकार है. उदाहरण के लिए, यदि कोई ऐप्लिकेशन अगर फ़ोरग्राउंड सेवा में कैमरे का इस्तेमाल किया जाता है, तो आपको दोनों का अनुरोध करना होगा FOREGROUND_SERVICE और FOREGROUND_SERVICE_CAMERA अनुमतियां दी हैं. ये सभी सामान्य अनुमतियां हैं. इसलिए, सिस्टम इन्हें अनुमति देता है स्वचालित रूप से सबमिट करेगा, जब वे मेनिफ़ेस्ट में सूचीबद्ध हों.

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA"/>

    <application ...>
        ...
    </application>
</manifest>

फ़ोरग्राउंड सेवा से जुड़ी ज़रूरी शर्तें

Android 14 (एपीआई लेवल 34) से, फ़ोरग्राउंड सेवा लॉन्च करते समय, सिस्टम, सेवा के टाइप के आधार पर ज़रूरी शर्तों की जांच करता है. उदाहरण के लिए, अगर location टाइप की फ़ोरग्राउंड सेवा को लॉन्च करने की कोशिश की जाती है, तो सिस्टम जांच करता है यह पक्का करने के लिए कि आपके ऐप्लिकेशन में पहले से ACCESS_COARSE_LOCATION या ACCESS_FINE_LOCATION की अनुमति. अगर ऐसा नहीं होता है, तो सिस्टम SecurityException.

इस वजह से, आपको पुष्टि करनी होगी कि ज़रूरी शर्तें पूरी की गई हैं फ़ोरग्राउंड सेवा शुरू करने से पहले. फ़ोरग्राउंड सेवा type दस्तावेज़ फ़ोरग्राउंड सेवा के हर टाइप के लिए ज़रूरी शर्तों की सूची बनाता है.

फ़ोरग्राउंड सेवा शुरू करना

सिस्टम से किसी सेवा को फ़ोरग्राउंड सेवा के तौर पर चलाने का अनुरोध करने से पहले, शुरू करें खुद:

Kotlin

val intent = Intent(...) // Build the intent for the service
context.startForegroundService(intent)

Java

Context context = getApplicationContext();
Intent intent = new Intent(...); // Build the intent for the service
context.startForegroundService(intent);

आम तौर पर, सेवा के अंदर onStartCommand() में अनुरोध किया जा सकता है फ़ोरग्राउंड में चलने पर आपकी सेवा का इस्तेमाल किया जा सकता है. ऐसा करने के लिए, कॉल करें ServiceCompat.startForeground() (Androidx-कोर 1.12 और इसके बाद वाले वर्शन में उपलब्ध). इस तरीके में ये ज़रूरी शर्तें होती हैं पैरामीटर:

ये टाइप, मेनिफ़ेस्ट में बताए गए टाइप के सबसेट हो सकते हैं, इस्तेमाल के उदाहरण के हिसाब से. इसके बाद, अगर आपको कई तरह की सेवाएं जोड़नी हों, आपके पास startForeground() को फिर से कॉल करने का विकल्प है.

उदाहरण के लिए, मान लें कि कोई फ़िटनेस ऐप्लिकेशन रनिंग-ट्रैकर सेवा देता है, location की जानकारी चाहिए, लेकिन मीडिया चलाने की ज़रूरत हो सकती है या नहीं भी. आपने लोगों तक पहुंचाया मुफ़्त में मेनिफ़ेस्ट में location और mediaPlayback, दोनों के बारे में जानकारी देनी होगी. अगर कोई उपयोगकर्ता दौड़ना शुरू करता है और बस उसे अपनी जगह की जानकारी ट्रैक करना चाहता है, तो आपके ऐप्लिकेशन को कॉल करना चाहिए startForeground() और सिर्फ़ ACCESS_FINE_LOCATION की अनुमति पास करें. इसके बाद, अगर उपयोगकर्ता ऑडियो चलाना चाहता है, तो startForeground() पर फिर से कॉल करें और सभी फ़ोरग्राउंड सेवाओं के टाइप का बिटवाइज़ कॉम्बिनेशन पास करें (इस मामले में, ACCESS_FINE_LOCATION|FOREGROUND_SERVICE_MEDIA_PLAYBACK).

यहां कैमरे के साथ काम करने वाली फ़ोरग्राउंड सेवा को लॉन्च करने का एक उदाहरण दिया गया है:

Kotlin

class MyCameraService: Service() {

  private fun startForeground() {
    // Before starting the service as foreground check that the app has the
    // appropriate runtime permissions. In this case, verify that the user has
    // granted the CAMERA permission.
    val cameraPermission =
            PermissionChecker.checkSelfPermission(this, Manifest.permission.CAMERA)
    if (cameraPermission != PermissionChecker.PERMISSION_GRANTED) {
        // Without camera permissions the service cannot run in the foreground
        // Consider informing user or updating your app UI if visible.
        stopSelf()
        return
    }

    try {
        val notification = NotificationCompat.Builder(this, "CHANNEL_ID")
            // Create the notification to display while the service is running
            .build()
        ServiceCompat.startForeground(
            /* service = */ this,
            /* id = */ 100, // Cannot be 0
            /* notification = */ notification,
            /* foregroundServiceType = */
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA
            } else {
                0
            },
        )
    } catch (e: Exception) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
                && e is ForegroundServiceStartNotAllowedException) {
            // App not in a valid state to start foreground service
            // (e.g. started from bg)
        }
        // ...
    }
  }
}

Java

public class MyCameraService extends Service {

    private void startForeground() {
        // Before starting the service as foreground check that the app has the
        // appropriate runtime permissions. In this case, verify that the user
        // has granted the CAMERA permission.
        int cameraPermission =
            ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
        if (cameraPermission == PackageManager.PERMISSION_DENIED) {
            // Without camera permissions the service cannot run in the
            // foreground. Consider informing user or updating your app UI if
            // visible.
            stopSelf();
            return;
        }

        try {
            Notification notification =
                new NotificationCompat.Builder(this, "CHANNEL_ID")
                    // Create the notification to display while the service
                    // is running
                    .build();
            int type = 0;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                type = ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERA;
            }
            ServiceCompat.startForeground(
                    /* service = */ this,
                    /* id = */ 100, // Cannot be 0
                    /* notification = */ notification,
                    /* foregroundServiceType = */ type
            );
        } catch (Exception e) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S &&
                    e instanceof ForegroundServiceStartNotAllowedException
            ) {
                // App not in a valid state to start foreground service
                // (e.g started from bg)
            }
            // ...
        }
    }

    //...
}

फ़ोरग्राउंड से किसी सेवा को हटाना

फ़ोरग्राउंड से सेवा हटाने के लिए, कॉल करें stopForeground(). इस तरीके में बूलियन वैल्यू होती है, जिससे पता चलता है कि स्टेटस बार को हटाना है या नहीं सूचना को पाने की कोशिश भी कर सकते हैं. ध्यान दें कि सेवा लगातार चल रही है.

अगर सेवा को फ़ोरग्राउंड में चलने से रोका जाता है, तो उसकी सूचना निकाल दिया जाता है.

फ़ोरग्राउंड सेवाएं चलाने वाले ऐप्लिकेशन को उपयोगकर्ता की ओर से रोकने की प्रोसेस मैनेज करना

नोटिफ़िकेशन पैनल के नीचे एक बटन होता है, जो
    बैकग्राउंड में चल रहे ऐप्लिकेशन की संख्या. बटन दबाने पर
    इस बटन पर एक डायलॉग दिखता है, जिसमें अलग-अलग ऐप्लिकेशन के नाम की सूची होती है. कॉन्टेंट बनाने
    &#39;रोकें&#39; बटन हर ऐप्लिकेशन की दाईं ओर होता है
पहली इमेज. उन डिवाइस पर Task Manager का वर्कफ़्लो जहां आपका ऐप्लिकेशन काम कर रहा है जो Android 13 या इसके बाद के वर्शन पर काम करते हों.

Android 13 (एपीआई लेवल 33) की शुरुआत में, उपयोगकर्ता इस वर्कफ़्लो को पूरा कर सकते हैं: सूचना दिखाने वाला पैनल किसी ऐसे ऐप्लिकेशन को बंद करने के लिए जिसकी फ़ोरग्राउंड सेवाएं पहले से चल रही हैं. भले ही, वह ऐप्लिकेशन टारगेट SDK टूल का वर्शन. इस किफ़ायती कीमत को टास्क मैनेजर, उन ऐप्लिकेशन की सूची दिखाता है जो फ़िलहाल, फ़ोरग्राउंड सेवा का इस्तेमाल किया जा रहा है.

इस सूची पर चालू ऐप्लिकेशन का लेबल लगा होता है. हर ऐप्लिकेशन के आगे एक बंद करें बटन होता है. इमेज 1 में टास्क मैनेजर का वर्कफ़्लो, ऐसे डिवाइस पर चल रहा है जिस पर काम होता है Android 13.

जब उपयोगकर्ता बंद करें बटन दबाता है, तो टास्क मैनेजर से ये कार्रवाइयां की जाती हैं:

  • सिस्टम आपके ऐप्लिकेशन को मेमोरी से हटा देता है. इसलिए, आपका पूरा ऐप्लिकेशन बंद हो जाता है, ध्यान दें कि यह सिर्फ़ फ़ोरग्राउंड सेवा तक सीमित नहीं है.
  • सिस्टम आपके ऐप्लिकेशन की ऐक्टिविटी बैक स्टैक को हटा देता है.
  • कोई भी मीडिया प्लेबैक बंद हो जाता है.
  • फ़ोरग्राउंड सेवा से जुड़ी सूचना हटा दी गई है.
  • आपका ऐप्लिकेशन इतिहास में बना रहता है.
  • शेड्यूल किए गए काम अपने शेड्यूल किए गए समय पर लागू होते हैं.
  • अलार्म अपने शेड्यूल किए गए समय या समय विंडो पर बंद हो जाते हैं.

यह जांच करने के लिए कि आपका ऐप्लिकेशन उपयोगकर्ता के आपके बोलने के दौरान और उसके बाद, उम्मीद के मुताबिक काम करता है या नहीं ऐप्लिकेशन को टर्मिनल विंडो में नीचे दिए गए ADB कमांड को चलाएं:

adb shell cmd activity stop-app PACKAGE_NAME

मुक्तियाँ

सिस्टम कुछ खास तरह के ऐप्लिकेशन को छूट के कई लेवल देता है, जो नीचे दिए गए सेक्शन में बताए गए हैं.

छूट सिर्फ़ ऐप्लिकेशन के हिसाब से उपलब्ध होती हैं, न कि हर प्रोसेस के हिसाब से. अगर सिस्टम, किसी एक प्रोसेस में छूट देता है, हैं, तो उस ऐप्लिकेशन में अन्य सभी प्रोसेस के लिए भी छूट उपलब्ध है.

टास्क मैनेजर में दिखने से बिलकुल भी छूट

ये ऐप्लिकेशन, फ़ोरग्राउंड सेवा चला सकते हैं और टास्क मैनेजर:

  • सिस्टम-लेवल के ऐप्लिकेशन
  • सुरक्षा से जुड़े ऐप्लिकेशन; वे ऐप्लिकेशन जिनमें ROLE_EMERGENCY भूमिका
  • ऐसे डिवाइस जिनमें मौजूद है डेमो मोड

ऐसी छूट जिन्हें उपयोगकर्ता रोक नहीं सकते

जब इस तरह के ऐप्लिकेशन फ़ोरग्राउंड सेवा चलाते हैं, तो वे टास्क मैनेजर है, लेकिन टास्क मैनेजर के आगे कोई बंद करें बटन नहीं है टैप करने के लिए ऐप्लिकेशन का नाम:

फ़ोरग्राउंड सेवाओं के बजाय, खास मकसद से बनाए गए एपीआई इस्तेमाल करें

इस्तेमाल के कई उदाहरणों में, ऐसे प्लैटफ़ॉर्म या Jetpack API मौजूद हैं जिनका इस्तेमाल अपने काम के लिए किया जा सकता है इनके लिए फ़ोरग्राउंड सेवा का इस्तेमाल किया जा सकता है. अगर कोई मकसद के लिए बनाया गया एपीआई, आपको फ़ोरग्राउंड का इस्तेमाल करने के बजाय हमेशा इसका इस्तेमाल करना चाहिए सेवा. purpose-बिल्ट एपीआई, अक्सर इस्तेमाल के उदाहरण से जुड़ी खास जानकारी मुहैया कराता है जिन्हें आपको खुद ही तैयार करना पड़ता. उदाहरण के लिए, बबल्स एपीआई, इन कामों के लिए जटिल यूज़र इंटरफ़ेस (यूआई) लॉजिक को हैंडल करता है ऐसे मैसेजिंग ऐप्लिकेशन जिनके लिए चैट-बबल की सुविधाएं लागू करने की ज़रूरत है.

फ़ोरग्राउंड सेवा के टाइप की सूचियों के लिए दस्तावेज़ फ़ोरग्राउंड सेवा के बजाय, इस्तेमाल करने के बेहतर विकल्प हैं.

बैकग्राउंड से फ़ोरग्राउंड सेवा शुरू करने पर पाबंदियां

Android 12 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन, फ़ोरग्राउंड से बाहर नहीं जा सकते ऐप्लिकेशन के बैकग्राउंड में चलने के दौरान सेवाएं. हालांकि, कुछ खास सुविधाओं को छोड़कर केस. अगर कोई ऐप्लिकेशन फ़ोरग्राउंड सेवा और ऐप्लिकेशन के बैकग्राउंड में चलने के दौरान और फ़ोरग्राउंड में सेवा किसी एक अपवाद मामले में सफल नहीं होती, तो सिस्टम ForegroundServiceStartNotAllowedException.

इसके अलावा, अगर कोई ऐप्लिकेशन ऐसी फ़ोरग्राउंड सेवा लॉन्च करना चाहता है जिसके लिए इस्तेमाल के दौरान अनुमतियां (उदाहरण के लिए, बॉडी सेंसर, कैमरा, माइक्रोफ़ोन या जगह अनुमतियां), ऐप्लिकेशन के बैकग्राउंड में चलने पर, यह सेवा नहीं बना सकता, भले ही ऐप्लिकेशन, बैकग्राउंड में शुरू होने की वजह से मिलने वाली छूट प्रतिबंध. इसकी वजह इन पर लगी पाबंदियां ऐसी फ़ोरग्राउंड सेवाएं शुरू करना चाहते हैं जिन्हें इस्तेमाल करते समय ज़रूरी हो अनुमतियां हैं.

बैकग्राउंड में लागू होने वाली पाबंदियों से छूट

इन स्थितियों में आपका ऐप्लिकेशन, फ़ोरग्राउंड सेवाएं तब भी चालू कर सकता है, जब आपका ऐप्लिकेशन बैकग्राउंड में चलता है:

फ़ोरग्राउंड सेवाएं शुरू करने से जुड़ी पाबंदियां, जिन्हें इस्तेमाल के दौरान अनुमतियों की ज़रूरत होती है

Android 14 (एपीआई लेवल 34) या उसके बाद वाले वर्शन पर, कुछ खास स्थितियों का ध्यान रखना चाहिए की ज़रूरत होगी.

अगर आपका ऐप्लिकेशन, Android 14 या इसके बाद वाले वर्शन को टारगेट करता है, तो ऑपरेटिंग सिस्टम फ़ोरग्राउंड सेवा बनाते समय जांच करता है, ताकि यह पक्का किया जा सके कि आपके ऐप्लिकेशन में वे सभी उस सेवा टाइप के लिए ज़रूरी अनुमतियां होनी चाहिए. उदाहरण के लिए, जब आप इस तरह की फ़ोरग्राउंड सेवा माइक्रोफ़ोन, ऑपरेटिंग सिस्टम इस बात की पुष्टि करता है कि फ़िलहाल आपके ऐप्लिकेशन में RECORD_AUDIO अनुमति. अगर आपके पास वह अनुमति नहीं है, तो सिस्टम SecurityException.

इस्तेमाल के दौरान दी जाने वाली अनुमतियों के लिए, इससे एक समस्या हो सकती है. अगर आपके ऐप्लिकेशन में इस्तेमाल करते समय अनुमति है, तो इसके पास सिर्फ़ वह अनुमति होती है जब यह फ़ोरग्राउंड है. इसका मतलब है कि अगर आपका ऐप्लिकेशन बैकग्राउंड में चल रहा है और वह बैकग्राउंड में वीडियो बनाने की कोशिश करता है कैमरा, जगह की जानकारी या माइक्रोफ़ोन टाइप करने की फ़ोरग्राउंड सेवा है, जिसे सिस्टम यह ध्यान दिया जाता है कि फ़िलहाल आपके ऐप्लिकेशन के पास ज़रूरी अनुमतियां नहीं हैं. साथ ही, ऐप्लिकेशन SecurityException.

इसी तरह, अगर आपका ऐप्लिकेशन बैकग्राउंड में है और यह ऐसी स्वास्थ्य सेवा जिसे BODY_SENSORS_BACKGROUND की अनुमति की ज़रूरत है, ऐप्लिकेशन के पास अभी यह अनुमति नहीं है, और सिस्टम एक अपवाद दिखाता है. (यह तब लागू नहीं होता जब यह कोई ऐसी स्वास्थ्य सेवा हो जिसे अलग अनुमतियों की ज़रूरत हो, जैसे, ACTIVITY_RECOGNITION.) कॉल किया जा रहा है PermissionChecker.checkSelfPermission() इस समस्या से नहीं बचाव होता है. अगर आपके ऐप्लिकेशन को कुछ समय के लिए इस्तेमाल करने की अनुमति है, और यह checkSelfPermission() को कॉल करके पता लगाता है कि उसके पास अनुमति है या नहीं. ऐप्लिकेशन के बैकग्राउंड में होने पर भी, PERMISSION_GRANTED दिखाता है. जब तरीका PERMISSION_GRANTED दिखाता है, तो मैसेज में लिखा होता है "आपके ऐप्लिकेशन के पास यह अनुमति है जब ऐप्लिकेशन का इस्तेमाल किया जा रहा हो."

इस वजह से, अगर फ़ोरग्राउंड सेवा को इस्तेमाल के दौरान अनुमति की ज़रूरत है, तो आपको इस समय Context.startForegroundService() या Context.bindService() को कॉल करना होगा आपके ऐप्लिकेशन में कोई गतिविधि तब तक दिखती है, जब तक कि सेवा तय की गई छूट.

इस्तेमाल के दौरान मिलने वाली अनुमतियों पर लगी पाबंदियों से छूट

कुछ मामलों में, भले ही ऐप्लिकेशन इस्तेमाल करने के दौरान फ़ोरग्राउंड सेवा शुरू की गई हो रन बैकग्राउंड में, तब भी यह जगह की जानकारी को ऐक्सेस कर सकता है, ऐप्लिकेशन के फ़ोरग्राउंड में चलने के दौरान, कैमरे और माइक्रोफ़ोन की जानकारी ("इस्तेमाल के दौरान").

इन्हीं परिस्थितियों में, अगर सेवा फ़ोरग्राउंड सेवा का टाइप location है. इसे ऐसे ऐप्लिकेशन से शुरू किया गया है जो है ACCESS_BACKGROUND_LOCATION अनुमति देती है, तो यह सेवा जगह की जानकारी हमेशा ऐक्सेस कर सकती है, भले ही ऐप्लिकेशन बैकग्राउंड में चलता है.

नीचे दी गई सूची में ये स्थितियां शामिल हैं:

  • सिस्टम कॉम्पोनेंट, सेवा शुरू करता है.
  • सेवा app के साथ इंटरैक्ट करके शुरू होती है विजेट.
  • सेवा की शुरुआत सूचना पर क्लिक करके होती है.
  • सेवा इस तरह से शुरू होती है: PendingIntent को दिखाई देने वाला ऐप अलग होता है.
  • यह सेवा एक ऐसे ऐप्लिकेशन से शुरू होती है जो डिवाइस से जुड़ी नीति है कंट्रोलर जो डिवाइस के मालिक वाले मोड में चलता है.
  • यह सेवा, VoiceInteractionService देने वाले ऐप्लिकेशन से शुरू होती है.
  • सेवा एक ऐसे ऐप्लिकेशन से शुरू होती है जिसमें START_ACTIVITIES_FROM_BACKGROUND खास अनुमति.
जानें कि आपके ऐप्लिकेशन में किन सेवाओं पर असर पड़ा है

अपने ऐप्लिकेशन की जांच करते समय, फ़ोरग्राउंड सेवाएं शुरू करें. अगर चालू की गई सेवा में ने जगह की जानकारी, माइक्रोफ़ोन, और कैमरे के ऐक्सेस पर पाबंदी लगाई है. इसके बाद, यह मैसेज दिखेगा: Logcat में दिखाई देता है:

Foreground service started from background can not have \
location/camera/microphone access: service SERVICE_NAME