একটি স্মার্টফোনের লাইফসাইকেল চলাকালীন, মোবাইল ডেটা প্ল্যানের খরচ সহজেই ডিভাইসের দামের থেকে বেশি হতে পারে। 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() ব্যবহার করে:
Kotlin
(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-তে এই আচরণ আলাদা হয়। ব্যাকগ্রাউন্ড ব্যবহার
ব্লক করার পরিবর্তে, 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 সহ ওয়াই-ফাইকে মিটার্ড হিসেবে সেট করে, যা আপনাকে মিটার্ড নয় এমন নেটওয়ার্কে মিটার্ড নেটওয়ার্ক সিমুলেট করার অনুমতি দেয়।