नेटवर्क डेटा के इस्तेमाल को ऑप्टिमाइज़ करें

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

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

Android 7.0 (एपीआई लेवल 24) में, ConnectivityManager एपीआई को बेहतर बनाया गया है. इससे ऐप्लिकेशन को उपयोगकर्ता के डेटा बचाने की सेटिंग की प्राथमिकताएं पाने और प्राथमिकता में होने वाले बदलावों पर नज़र रखने में मदद मिलती है. ऐप्लिकेशन के लिए यह देखना अच्छा माना जाता है कि उपयोगकर्ता ने डेटा बचाने की सेटिंग चालू की है या नहीं. साथ ही, फ़ोरग्राउंड और बैकग्राउंड में डेटा के इस्तेमाल को सीमित करने की कोशिश की है या नहीं.

डेटा बचाने की सेटिंग देखना

Android 7.0 (एपीआई लेवल 24) और इसके बाद के वर्शन पर, ऐप्लिकेशन ConnectivityManager एपीआई का इस्तेमाल करके यह पता लगा सकते हैं कि डेटा के इस्तेमाल पर कौनसी पाबंदियां लागू की जा रही हैं. getRestrictBackgroundStatus() तरीका, इनमें से कोई एक वैल्यू दिखाता है:

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

जब भी डिवाइस किसी मीटर किए गए नेटवर्क से कनेक्ट हो, तब डेटा के इस्तेमाल को सीमित करें. भले ही, डेटा बचाने की सेटिंग बंद हो या ऐप्लिकेशन को इसे बायपास करने की अनुमति हो. नीचे दिए गए सैंपल कोड में, ConnectivityManager.isActiveNetworkMetered() और ConnectivityManager.getRestrictBackgroundStatus() का इस्तेमाल करके यह तय किया जाता है कि ऐप्लिकेशन को कितना डेटा इस्तेमाल करना चाहिए:

with(getSystemService(ConnectivityManager::class.java)) {
    // Checks if the device is on a metered network.
    if (isActiveNetworkMetered) {
        // Checks user’s Data Saver settings.
        when (restrictBackgroundStatus) {
            RESTRICT_BACKGROUND_STATUS_ENABLED -> {
                // Background data usage is blocked for this app. Wherever possible,
                // the app should also use less data in the foreground.
            }
            RESTRICT_BACKGROUND_STATUS_WHITELISTED -> {
                // The app is allowed to bypass Data Saver. Nevertheless, wherever possible,
                // the app should use less data in the foreground and background.
            }
            RESTRICT_BACKGROUND_STATUS_DISABLED -> {
                // Data Saver is disabled. Since the device is connected to a
                // metered network, the app should use less data wherever possible.
            }
        }
    } else {
        // The device is not on a metered network.
        // Use data as required to perform syncs, downloads, and updates.
    }
}

ध्यान दें: Android TV पर यह सुविधा अलग तरह से काम करती है. बैकग्राउंड में इस्तेमाल को ब्लॉक करने के बजाय, Android TV सिर्फ़ इसे थ्रॉटल करता है. फ़ोरग्राउंड में होने पर, ऐप्लिकेशन 800 केबीपीएस तक और बैकग्राउंड में होने पर, 10 केबीपीएस तक सीमित होते हैं. ConnectivityManager.isActiveNetworkMetered() का इस्तेमाल करके, यह पता लगाएं कि टीवी पर डेटा के इस्तेमाल को कब सीमित करना है.

डेटा पर पाबंदी लगाने की अनुमतियों का अनुरोध करना

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

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

डेटा बचाने की सेटिंग में हुए बदलावों पर नज़र रखना

ऐप्लिकेशन, डेटा बचाने के टूल की सेटिंग में होने वाले बदलावों पर नज़र रख सकते हैं. इसके लिए, उन्हें BroadcastReceiver बनाना होगा, ताकि वे ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED को सुन सकें. साथ ही, Context.registerReceiver() की मदद से रिसीवर को डाइनैमिक तौर पर रजिस्टर करना होगा. जब किसी ऐप्लिकेशन को यह ब्रॉडकास्ट मिलता है, तो उसे यह देखना चाहिए कि डेटा बचाने की नई सेटिंग से उसकी अनुमतियों पर असर पड़ता है या नहीं. इसके लिए, उसे ConnectivityManager.getRestrictBackgroundStatus() को कॉल करना चाहिए.

ध्यान दें: सिस्टम इस ब्रॉडकास्ट को सिर्फ़ उन ऐप्लिकेशन को भेजता है जो Context.registerReceiver() के साथ डाइनैमिक तौर पर रजिस्टर करते हैं. जिन ऐप्लिकेशन ने अपने मेनिफ़ेस्ट में इस ब्रॉडकास्ट को पाने के लिए रजिस्टर किया है उन्हें यह ब्रॉडकास्ट नहीं मिलेगा.

Android डीबग ब्रिज कमांड की मदद से टेस्ट करना

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

$ adb shell dumpsys netpolicy
इससे एक रिपोर्ट जनरेट होती है. इसमें, बैकग्राउंड में नेटवर्क के इस्तेमाल पर लगी पाबंदी की मौजूदा ग्लोबल सेटिंग, पैकेज के ऐसे यूआईडी जिन्हें डेटा बचाने की सेटिंग को बायपास करने की अनुमति है, और अन्य जाने-पहचाने पैकेज के लिए नेटवर्क की अनुमतियां शामिल होती हैं.
$ adb shell cmd netpolicy
नेटवर्क पॉलिसी मैनेजर (netpolicy) के सभी कमांड की सूची दिखाता है.
$ adb shell cmd netpolicy set restrict-background <boolean>
true या false पास करने पर, डेटा बचाने वाला मोड चालू या बंद हो जाता है.
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
यह अनुमति वाली सूची (whitelist) में, पैकेज का यूआईडी जोड़ता है, ताकि बैकग्राउंड में सीमित डेटा का इस्तेमाल किया जा सके.
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
यह अनुमति वाली सूची (whitelist) से, पैकेज के यूआईडी को हटा देता है, ताकि डेटा बचाने की सेटिंग चालू होने पर, बैकग्राउंड में सीमित डेटा के इस्तेमाल को ब्लॉक किया जा सके.
$ adb shell cmd netpolicy list wifi-networks
सभी वाई-फ़ाई नेटवर्क की सूची दिखाता है. साथ ही, यह भी दिखाता है कि वे मीटर किए गए हैं या नहीं.
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
यह कमांड, दिए गए SSID वाले वाई-फ़ाई को सीमित डेटा वाले नेटवर्क के तौर पर सेट करता है. इससे, डेटा इस्तेमाल की सीमा न होने वाले नेटवर्क पर, सीमित डेटा वाले नेटवर्क को सिम्युलेट किया जा सकता है.