ব্যাটারির আয়ুর উপর ব্যাকগ্রাউন্ড আপডেটের প্রভাব কমাতে আপনি যখন ব্যাকগ্রাউন্ড আপডেটের ফ্রিকোয়েন্সি পরিবর্তন করছেন, তখন বর্তমান ব্যাটারি লেভেল এবং চার্জিং স্টেট চেক করা একটি ভালো জায়গা।
অ্যাপ্লিকেশন আপডেট করার ফলে ব্যাটারির আয়ুর উপর কতটা প্রভাব পড়বে তা নির্ভর করে ব্যাটারির লেভেল এবং ডিভাইসের চার্জিং অবস্থার উপর। এসি-র মাধ্যমে ডিভাইস চার্জ করার সময় আপডেট করলে খুবই কম প্রভাব পড়ে, তাই বেশিরভাগ ক্ষেত্রে ডিভাইস ওয়াল চার্জারের সাথে কানেক্ট করা থাকলে আপনি রিফ্রেশ রেট বাড়াতে পারবেন। অন্যদিকে, ডিভাইসের চার্জ কমে গেলে, আপডেট রেট কমালে ব্যাটারির আয়ু বাড়ে।
একইভাবে, আপনি ব্যাটারির চার্জ লেভেল চেক করতে পারেন, ব্যাটারির চার্জ প্রায় শেষ হয়ে গেলে, সম্ভাব্যভাবে আপডেটের ফ্রিকোয়েন্সি কমাতে—বা এমনকি বন্ধ করতে—পারেন।
বর্তমান চার্জিং স্ট্যাটাস নির্ধারণ করুন
বর্তমান চার্জের স্ট্যাটাস নির্ধারণ করে শুরু করুন। BatteryManager
ব্যাটারি ও চার্জিং সংক্রান্ত সব তথ্য একটি স্টিকি Intent-এ ব্রডকাস্ট করে, যার মধ্যে
চার্জিং স্ট্যাটাসও অন্তর্ভুক্ত থাকে।
এটি একটি স্টিকি ইনটেন্ট হওয়ার কারণে, আপনাকে BroadcastReceiver রেজিস্টার করতে হবে না—পরবর্তী স্নিপেটে দেখানো রিসিভার হিসেবে null-এ পাস করে registerReceiver-কে কল করার মাধ্যমে, বর্তমান ব্যাটারি স্ট্যাটাস ইনটেন্ট
ফেরত পাঠানো হয়। আপনি এখানে একটি আসল BroadcastReceiver অবজেক্ট পাস করতে পারেন, তবে
আমরা পরবর্তী বিভাগে আপডেটগুলি পরিচালনা করব তাই এটি প্রয়োজনীয় নয়।
Kotlin
val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter -> context.registerReceiver(null, ifilter) }
জাভা
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = context.registerReceiver(null, ifilter);
আপনি বর্তমান চার্জিং স্ট্যাটাস এবং ডিভাইস চার্জ করা হলে, সেটি USB নাকি AC চার্জারের মাধ্যমে চার্জ করা হচ্ছে, দুটিই এক্সট্র্যাক্ট করতে পারবেন:
Kotlin
val status: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1 val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL // How are we charging? val chargePlug: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) ?: -1 val usbCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_USB val acCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_AC
জাভা
// Are we charging / charged? int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; // How are we charging? int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
সাধারণত, ডিভাইস AC চার্জারের সাথে কানেক্ট করা থাকলে ব্যাকগ্রাউন্ড আপডেট রেট সর্বাধিক করা উচিত, USB-এর মাধ্যমে চার্জ করা হলে রেট কমানো উচিত এবং ব্যাটারি ডিসচার্জ হলে আরও কমানো উচিত।
চার্জিং স্ট্যাটাসে পরিবর্তন মনিটর করুন
চার্জিং স্ট্যাটাস খুব সহজেই পরিবর্তন হতে পারে, যেমন কোনও ডিভাইস প্লাগ-ইন করা হলে, তাই চার্জিং স্ট্যাটাস পরিবর্তন হচ্ছে কিনা তা মনিটর করা এবং সেই অনুযায়ী রিফ্রেশ রেট পরিবর্তন করা গুরুত্বপূর্ণ।
ডিভাইস পাওয়ারের সাথে কানেক্ট বা ডিসকানেক্ট করা হলে, BatteryManager একটি অ্যাকশন ব্রডকাস্ট করে। আপনার অ্যাপ না চললেও এইসব ইভেন্ট রিসিভ করা গুরুত্বপূর্ণ—বিশেষ করে এইসব ইভেন্ট ব্যাকগ্রাউন্ড আপডেট শুরু করার জন্য আপনি কত ঘনঘন অ্যাপ চালু করেন তার উপর প্রভাব ফেলে—তাই আপনাকে ম্যানিফেস্টে BroadcastReceiver রেজিস্টার করতে হবে যাতে ইনটেন্ট ফিল্টারের মধ্যে ACTION_POWER_CONNECTED ও ACTION_POWER_DISCONNECTED সংজ্ঞায়িত করে দুটি ইভেন্টই শোনা যায়।
<receiver android:name=".PowerConnectionReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> </intent-filter> </receiver>
ব্যাটারির বর্তমান লেভেল নির্ধারণ করা
কিছু ক্ষেত্রে, ব্যাটারির বর্তমান লেভেল নির্ধারণ করার জন্যও এটি উপযোগী। ব্যাটারির চার্জ নির্দিষ্ট লেভেলের নিচে নেমে গেলে, আপনি ব্যাকগ্রাউন্ড আপডেট করার হার কমাতে পারেন।
ব্যাটারির স্ট্যাটাস ইনটেন্ট থেকে বর্তমান ব্যাটারি লেভেল ও স্কেল এক্সট্র্যাক্ট করে আপনি ব্যাটারির বর্তমান চার্জ খুঁজে পেতে পারেন, যেমন এখানে দেখানো হয়েছে:
Kotlin
val batteryPct: Float? = batteryStatus?.let { intent -> val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1) level * 100 / scale.toFloat() }
জাভা
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level * 100 / (float)scale;
ব্যাটারির লেভেলে উল্লেখযোগ্য পরিবর্তন হলে প্রতিক্রিয়া দেখান
আপনি সহজেই ব্যাটারির অবস্থা ক্রমাগত মনিটর করতে পারবেন না, তবে আপনাকে তা করতেও হবে না।
সাধারণত, ব্যাটারি লেভেল মনিটর করার প্রভাব আপনার অ্যাপের স্বাভাবিক আচরণের চেয়ে ব্যাটারির উপর বেশি প্রভাব ফেলে। যেমন, ব্যাটারির চার্জ কম থাকলে বাকি থাকা কাজ বাতিল করার জন্য ম্যানিফেস্টে
BroadcastReceiver রেজিস্টার করলে
তা মূলত ব্যাটারির চার্জ আরও বেশি খরচ করবে (এবং তাই
Android 8.0-এর পর থেকে
এটি করা অসম্ভব)। পরিবর্তে, আপনি কাজের উপর সীমাবদ্ধতা প্রদান করতে পারেন যা বর্ণনা করে যে এটি কখন চালানো উচিত,
সিস্টেমকে আপনার অ্যাপ শুরু করার জন্য পাওয়ার খরচ না করেই সিদ্ধান্ত নেওয়ার অনুমতি দেয়।
ব্যাটারির চার্জ খুব কম থাকলে ব্যাকগ্রাউন্ডে আপডেট না করাই ভাল। আপনার ডেটা কতটা নতুন তা কোনও ব্যাপার নয় যদি আপনি ব্যবহার করার আগেই ফোন বন্ধ হয়ে যায়। এটি করতে,
WorkManager লাইব্রেরি ব্যবহার করুন
এবং সাথে
BatteryNotLow সীমাবদ্ধতা
ব্যবহার করে উল্লেখ করুন যে ব্যাটারি কম থাকলে কাজ চালানো যাবে না (এছাড়াও প্রাসঙ্গিক
NetworkType সীমাবদ্ধতা)।
অনেক ক্ষেত্রে, ডিভাইস চার্জ করার সময় সেটি ডকে রাখা হয়। আরও জানতে, ডকিং স্টেট ও ধরন নির্ধারণ ও মনিটর করা দেখুন।