নেটওয়ার্ক ডেটার ব্যবহার অপ্টিমাইজ করুন

একটি ফোনের লাইফটাইমে, মোবাইল ডেটা প্ল্যানের খরচ ডিভাইসের দামের চেয়ে বেশি হতে পারে। Android 7.0 (API লেভেল ২৪) এবং তার পরবর্তী ভার্সনে, ব্যবহারকারীরা ডিভাইসের ডেটা ব্যবহার অপ্টিমাইজ করতে এবং কম ডেটা ব্যবহার করতে ডিভাইস-ওয়াইড ভিত্তিতে ডেটা সেভার চালু করতে পারেন। এই সুবিধা বিশেষ করে রোমিংয়ের সময়, বিলিং চক্রের শেষের দিকে অথবা ছোট প্রিপেড ডেটা প্যাকের ক্ষেত্রে উপযোগী।

কোনও ব্যবহারকারী সেটিংস থেকে ডেটা সেভার চালু করলে এবং ডিভাইসটি মিটার করা নেটওয়ার্কে থাকলে, সিস্টেম ব্যাকগ্রাউন্ড ডেটার ব্যবহার ব্লক করে এবং অ্যাপকে সিগন্যাল পাঠায় যাতে সম্ভব হলে ফোরগ্রাউন্ডে কম ডেটা ব্যবহার করা হয়। ব্যবহারকারীরা নির্দিষ্ট অ্যাপকে ব্যাকগ্রাউন্ডে মিটার করা ডেটা ব্যবহার করার অনুমতি দিতে পারেন, এমনকি ডেটা সেভার চালু থাকলেও।

Android 7.0 (API লেভেল ২৪) ConnectivityManager API-কে এক্সটেন্ড করে যাতে অ্যাপ ব্যবহারকারীর ডেটা সেভার সংক্রান্ত পছন্দ ফিরিয়ে আনতে এবং পছন্দ পরিবর্তন মনিটর করতে পারে। ব্যবহারকারী ডেটা সেভার চালু করেছেন কিনা তা চেক করা এবং ফোরগ্রাউন্ড ও ব্যাকগ্রাউন্ড ডেটা ব্যবহার সীমিত করার চেষ্টা করা অ্যাপের জন্য ভালো অভ্যাস হিসেবে বিবেচিত হয়।

ডেটা সেভার সংক্রান্ত পছন্দ চেক করুন

Android 7.0 (API লেভেল ২৪) এবং তার পরবর্তী ভার্সনে, ডেটা ব্যবহারের উপর কী কী বিধিনিষেধ প্রয়োগ করা হচ্ছে তা নির্ধারণ করতে অ্যাপ ConnectivityManager API ব্যবহার করতে পারে। 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 শুধুমাত্র এটি থ্রটল করে। ফোরগ্রাউন্ডে অ্যাপ্লিকেশন ৮০০ Kbps-এ সীমিত এবং ব্যাকগ্রাউন্ডে অ্যাপ্লিকেশন ১০ Kbps-এ সীমিত। টিভিতে ডেটা ব্যবহার কখন সীমিত করতে হবে তা শনাক্ত করতে ConnectivityManager.isActiveNetworkMetered() ব্যবহার করুন।

ডেটা বিধিনিষেধ সংক্রান্ত অনুমতির জন্য অনুরোধ করা

আপনার অ্যাপকে ব্যাকগ্রাউন্ডে ডেটা ব্যবহার করতে হলে, এটি ডেটা সীমাবদ্ধতার অনুমতি চেয়ে অনুরোধ করতে পারে। এর জন্য Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS ইনটেন্ট পাঠাতে হবে যাতে আপনার অ্যাপের প্যাকেজের নামের URI থাকবে: যেমন, package:MY_APP_ID।

ইনটেন্ট ও URI পাঠালে সেটিংস অ্যাপ চালু হয় এবং আপনার অ্যাপের জন্য ডেটা ব্যবহারের সেটিংস দেখায়। ব্যবহারকারী তখন সিদ্ধান্ত নিতে পারেন যে আপনার অ্যাপের জন্য ব্যাকগ্রাউন্ড ডেটা চালু করবেন কিনা। এই ইনটেন্ট পাঠানোর আগে, ব্যাকগ্রাউন্ড ডেটা ব্যবহার চালু করার উদ্দেশ্যে ব্যবহারকারী সেটিংস অ্যাপ চালু করতে চান কিনা তা প্রথমে জিজ্ঞাসা করা ভাল অভ্যাস।

ডেটা সেভার সংক্রান্ত পছন্দের পরিবর্তন মনিটর করা

অ্যাপগুলি BroadcastReceiver তৈরি করে ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED শোনার জন্য এবং Context.registerReceiver()-এর সাথে রিসিভারকে ডাইনামিকভাবে রেজিস্টার করে ডেটা সেভারের পছন্দগুলিতে পরিবর্তনগুলি মনিটর করতে পারে। কোনও অ্যাপ এই ব্রডকাস্ট পেলে, ConnectivityManager.getRestrictBackgroundStatus() কল করার মাধ্যমে নতুন ডেটা সেভার পছন্দ তার অনুমতিকে প্রভাবিত করে কিনা তা চেক করা উচিত।

মনে রাখবেন: সিস্টেম শুধুমাত্র সেইসব অ্যাপে এই ব্রডকাস্ট পাঠায় যেগুলি Context.registerReceiver()-এর সাথে ডায়নামিকভাবে রেজিস্টার করে। যেসব অ্যাপ তাদের ম্যানিফেস্টে এই ব্রডকাস্ট পাওয়ার জন্য রেজিস্টার করে, সেগুলি এটি পাবে না।

Android ডিবাগ ব্রিজ কমান্ডের সাহায্যে পরীক্ষা করা

Android ডিবাগ ব্রিজ (ADB) কিছু কমান্ড প্রদান করে যা আপনি ডেটা সেভার পরিস্থিতিতে আপনার অ্যাপ পরীক্ষা করতে ব্যবহার করতে পারেন। আপনি নেটওয়ার্ক অনুমতি চেক ও কনফিগার করতে পারেন অথবা আনমিটার্ড নেটওয়ার্কে আপনার অ্যাপ পরীক্ষা করার জন্য ওয়্যারলেস নেটওয়ার্ককে মিটার্ড হিসেবে সেট করতে পারেন।

$ adb shell dumpsys netpolicy
একটি রিপোর্ট তৈরি করে যার মধ্যে বর্তমান গ্লোবাল ব্যাকগ্রাউন্ড নেটওয়ার্ক বিধিনিষেধ সেটিংস, বর্তমানে ডেটা সেভার বাইপাস করার অনুমতি আছে এমন প্যাকেজ UID এবং অন্যান্য পরিচিত প্যাকেজের নেটওয়ার্ক অনুমতি অন্তর্ভুক্ত থাকে।
$ adb shell cmd netpolicy
নেটওয়ার্ক নীতি ম্যানেজার (netpolicy) কমান্ডের সম্পূর্ণ তালিকা দেখায়।
$ adb shell cmd netpolicy set restrict-background <boolean>
যথাক্রমে true বা false পাস করার সময় ডেটা সেভার মোড চালু বা বন্ধ করে।
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
ব্যাকগ্রাউন্ডে মিটার করা ডেটা ব্যবহার করার অনুমতি দিতে, নির্দিষ্ট প্যাকেজ UID-কে অনুমতি তালিকায় (whitelist) যোগ করে।
$ adb shell cmd netpolicy remove restrict-background-whitelist <UID>
'ডেটা সেভার' চালু থাকাকালীন ব্যাকগ্রাউন্ডে মিটার করা ডেটার ব্যবহার ব্লক করতে অনুমতি তালিকা (whitelist) থেকে নির্দিষ্ট প্যাকেজ UID সরিয়ে দেয়।
$ adb shell cmd netpolicy list wifi-networks
সব ওয়াই-ফাই নেটওয়ার্কের তালিকা দেখায় এবং সেগুলি মিটার করা কিনা তাও দেখায়।
$ adb shell cmd netpolicy set metered-network <WIFI_SSID> true
নির্দিষ্ট SSID সহ ওয়াই-ফাইকে মিটার্ড হিসেবে সেট করে, যা আপনাকে আনমিটার্ড নেটওয়ার্কে মিটার্ড নেটওয়ার্ক সিমুলেট করার অনুমতি দেয়।