ব্যাটারি লেভেল এবং চার্জিং স্টেট নিরীক্ষণ করুন

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

অ্যাপ্লিকেশন আপডেটগুলি সম্পাদন করার ব্যাটারি-লাইফ প্রভাব ডিভাইসের ব্যাটারি স্তর এবং চার্জিং অবস্থার উপর নির্ভর করে। ডিভাইসটি AC-তে চার্জ হওয়ার সময় আপডেটগুলি সম্পাদন করার প্রভাব নগণ্য, তাই বেশিরভাগ ক্ষেত্রে আপনি যখনই ডিভাইসটি একটি ওয়াল চার্জারের সাথে সংযুক্ত থাকে তখন আপনি আপনার রিফ্রেশ রেট সর্বাধিক করতে পারেন৷ বিপরীতভাবে, যদি ডিভাইসটি ডিসচার্জ হয়, আপনার আপডেটের হার হ্রাস করা ব্যাটারির আয়ুকে দীর্ঘায়িত করতে সহায়তা করে।

একইভাবে, আপনি ব্যাটারি চার্জের স্তর পরীক্ষা করতে পারেন, ব্যাটারির চার্জ প্রায় শেষ হয়ে গেলে আপনার আপডেটগুলির ফ্রিকোয়েন্সি কমিয়ে বা এমনকি বন্ধ করে দেয়৷

বর্তমান চার্জিং অবস্থা নির্ধারণ করুন

বর্তমান চার্জ স্থিতি নির্ধারণ করে শুরু করুন। BatteryManager একটি স্টিকি Intent সমস্ত ব্যাটারি এবং চার্জিং বিশদ সম্প্রচার করে যাতে চার্জিং স্ট্যাটাস অন্তর্ভুক্ত থাকে।

কারণ এটি একটি স্টিকি অভিপ্রায়, আপনাকে একটি BroadcastReceiver রেজিস্টার করার দরকার নেই — পরবর্তী স্নিপেটে দেখানো হিসাবে registerReceiver পাসিংকে রিসিভার হিসাবে null কল করে, বর্তমান ব্যাটারির স্থিতির অভিপ্রায় ফিরিয়ে দেওয়া হয়। আপনি এখানে একটি প্রকৃত BroadcastReceiver অবজেক্টে পাস করতে পারেন, কিন্তু আমরা পরবর্তী বিভাগে আপডেটগুলি পরিচালনা করব তাই এটি প্রয়োজনীয় নয়।

কোটলিন

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 চার্জারের মাধ্যমে চার্জ করা হচ্ছে উভয়ই বের করতে পারেন:

কোটলিন

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>

বর্তমান ব্যাটারির স্তর নির্ধারণ করুন

কিছু ক্ষেত্রে এটি বর্তমান ব্যাটারির স্তর নির্ধারণ করতেও কার্যকর। ব্যাটারির চার্জ একটি নির্দিষ্ট স্তরের নিচে থাকলে আপনি আপনার ব্যাকগ্রাউন্ড আপডেটের হার কমাতে বেছে নিতে পারেন।

আপনি এখানে দেখানো ব্যাটারির অবস্থার অভিপ্রায় থেকে বর্তমান ব্যাটারির স্তর এবং স্কেল বের করে বর্তমান ব্যাটারির চার্জ খুঁজে পেতে পারেন:

কোটলিন

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

ব্যাটারি ক্রিটিক্যালি কম হলে আপনার ব্যাকগ্রাউন্ড আপডেট না চালানো সাধারণত ভালো অভ্যাস। আপনি এটি ব্যবহার করার আগে ফোনটি বন্ধ হয়ে গেলে আপনার ডেটা কতটা তাজা তা বিবেচ্য নয়। এটি করার জন্য, একটি BatteryNotLow সীমাবদ্ধতা সহ WorkManager লাইব্রেরি ব্যবহার করুন যে ব্যাটারি কম থাকলে কাজটি চালানো উচিত নয় (যেকোন প্রাসঙ্গিক NetworkType সীমাবদ্ধতা ছাড়াও)।

অনেক ক্ষেত্রে, একটি ডিভাইস চার্জ করার কাজটি এটিকে ডকে রাখার সাথে কাকতালীয়। পরবর্তী পাঠ আপনাকে দেখায় কিভাবে বর্তমান ডক অবস্থা নির্ধারণ করতে হয় এবং ডিভাইস ডকিং এর পরিবর্তনের জন্য মনিটর করতে হয়।