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

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

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

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

ডেটা সেভার পছন্দগুলি পরীক্ষা করুন

অ্যান্ড্রয়েড 7.0 (API স্তর 24) এবং উচ্চতর, অ্যাপগুলি ConnectivityManager API ব্যবহার করে ডেটা ব্যবহারের বিধিনিষেধ প্রয়োগ করা হচ্ছে তা নির্ধারণ করতে পারে৷ getRestrictBackgroundStatus() পদ্ধতি নিম্নলিখিত মানগুলির একটি প্রদান করে:

RESTRICT_BACKGROUND_STATUS_DISABLED
ডেটা সেভার অক্ষম করা হয়েছে।
RESTRICT_BACKGROUND_STATUS_ENABLED
ব্যবহারকারী এই অ্যাপের জন্য ডেটা সেভার সক্ষম করেছেন। অ্যাপ্লিকেশানগুলিকে অগ্রভাগে ডেটা ব্যবহার সীমিত করার চেষ্টা করা উচিত এবং পটভূমিতে ডেটা ব্যবহারের সীমাবদ্ধতাগুলি সুন্দরভাবে পরিচালনা করা উচিত।
RESTRICT_BACKGROUND_STATUS_WHITELISTED
ব্যবহারকারী ডেটা সেভার সক্ষম করেছে তবে অ্যাপটিকে এটি বাইপাস করার অনুমতি দেওয়া হয়েছে। অ্যাপগুলির এখনও ফোরগ্রাউন্ড এবং ব্যাকগ্রাউন্ড ডেটা ব্যবহার সীমিত করার চেষ্টা করা উচিত।

যখনই ডিভাইসটি একটি মিটারযুক্ত নেটওয়ার্কের সাথে সংযুক্ত থাকে তখন ডেটা ব্যবহার সীমিত করুন, এমনকি যদি ডেটা সেভার অক্ষম করা থাকে বা অ্যাপটিকে এটিকে বাইপাস করার অনুমতি দেওয়া হয়। অ্যাপটির কতটা ডেটা ব্যবহার করা উচিত তা নির্ধারণ করতে নিম্নলিখিত নমুনা কোডটি ConnectivityManager.isActiveNetworkMetered() এবং ConnectivityManager.getRestrictBackgroundStatus() ব্যবহার করে:

কোটলিন

(getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager).apply {
    // 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.
    }
}

জাভা

ConnectivityManager connMgr = (ConnectivityManager)
        getSystemService(Context.CONNECTIVITY_SERVICE);
// Checks if the device is on a metered network
if (connMgr.isActiveNetworkMetered()) {
  // Checks user’s Data Saver settings.
  switch (connMgr.getRestrictBackgroundStatus()) {
    case RESTRICT_BACKGROUND_STATUS_ENABLED:
    // Background data usage is blocked for this app. Wherever possible,
    // the app should also use less data in the foreground.

    case 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.

    case 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 শুধুমাত্র এটিকে থ্রোটল করে। যখন অগ্রভাগে, অ্যাপ্লিকেশনগুলি 800 Kbps-এ সীমাবদ্ধ থাকে এবং যখন পটভূমিতে, অ্যাপ্লিকেশনগুলি 10 Kbps-এ সীমাবদ্ধ থাকে৷ কখন টিভিতে ডেটা ব্যবহার সীমিত করতে হবে তা সনাক্ত করতে ConnectivityManager.isActiveNetworkMetered() ব্যবহার করুন৷

তথ্য সীমাবদ্ধতা অনুমতি অনুরোধ

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

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

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

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

দ্রষ্টব্য: সিস্টেমটি শুধুমাত্র সেই অ্যাপগুলিতে এই সম্প্রচার পাঠায় যেগুলি তাদের জন্য Context.registerReceiver() এর সাথে গতিশীলভাবে নিবন্ধন করে। যে অ্যাপগুলি তাদের ম্যানিফেস্টে এই সম্প্রচার পাওয়ার জন্য নিবন্ধন করে তারা সেগুলি গ্রহণ করবে না৷

অ্যান্ড্রয়েড ডিবাগ ব্রিজ কমান্ড দিয়ে পরীক্ষা করুন

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

$ adb shell dumpsys netpolicy
একটি প্রতিবেদন তৈরি করে যাতে বর্তমান গ্লোবাল ব্যাকগ্রাউন্ড নেটওয়ার্ক সীমাবদ্ধতা সেটিং, প্যাকেজ ইউআইডি যা বর্তমানে ডেটা সেভারকে বাইপাস করার জন্য অনুমোদিত, এবং অন্যান্য পরিচিত প্যাকেজের নেটওয়ার্ক অনুমতি অন্তর্ভুক্ত করে।
$ adb shell cmd netpolicy
নেটওয়ার্ক পলিসি ম্যানেজার (নেটপলিসি) কমান্ডের একটি সম্পূর্ণ তালিকা প্রদর্শন করে।
$ adb shell cmd netpolicy set restrict-background <boolean>
যথাক্রমে true বা false পাস করার সময় ডেটা সেভার মোড সক্ষম বা নিষ্ক্রিয় করে।
$ adb shell cmd netpolicy add restrict-background-whitelist <UID>
ব্যাকগ্রাউন্ড মিটার করা ডেটা ব্যবহারের অনুমতি দেওয়ার জন্য অনুমোদিত তালিকায় ( whitelist ) নির্দিষ্ট প্যাকেজ UID যোগ করে।
$ 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 সহ ওয়াইফাই সেট করে, আপনাকে একটি মিটারযুক্ত নেটওয়ার্কে একটি মিটারযুক্ত নেটওয়ার্ক অনুকরণ করার অনুমতি দেয়।