ব্যাটারিবিহীন ডিভাইস সমর্থন করে

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

ব্যাটারি আছে কি?

ডিভাইসটিতে ব্যাটারি আছে কিনা তা শনাক্ত করতে অ্যাপ্লিকেশনগুলো নিম্নলিখিত কোডটি ব্যবহার করতে পারে:

```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));

return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```

ব্যাটারিবিহীন ডিভাইসের আচরণ

যদি অ্যান্ড্রয়েড আপনার পণ্যের জন্য কোনো ব্যাটারি ডিভাইস শনাক্ত করতে না পারে, তাহলে নিম্নলিখিত ব্যাটারি-সম্পর্কিত ডিফল্ট মানগুলো ব্যবহৃত হয়। উল্লেখ্য যে, অ্যান্ড্রয়েড ৯ সংস্করণে এই ডিফল্ট মানগুলো পরিবর্তিত হয়েছে। এই সারণিতে পার্থক্যগুলো দেখানো হয়েছে।

ব্যাটারির অবস্থা অ্যান্ড্রয়েড ৯ এবং উচ্চতর অ্যান্ড্রয়েড ৮.১ এবং এর নিচের সংস্করণ
বর্তমান মিথ্যা সত্য
অবস্থা অজানা চার্জিং
অবশিষ্ট ক্ষমতা ১০০%
স্বাস্থ্য অজানা ভালো
এসি চার্জারের অনলাইন অবস্থা পরিবর্তিত নয় সত্য হতে বাধ্য

নির্মাতারা কার্নেল পাওয়ার_সাপ্লাই ড্রাইভার অথবা হেলথ এইচএএল (Health HAL) ব্যবহার করে ডিফল্ট সেটিংস পরিবর্তন করতে পারেন।

অ্যান্ড্রয়েড ৯ এবং উচ্চতর

অ্যান্ড্রয়েড ৯ ব্যাটারিবিহীন ডিভাইসগুলোর জন্য তৈরি করা পূর্ববর্তী কিছু কোড সরিয়ে দিয়েছে, যেটি ডিফল্টভাবে এমন ভান করত যেন ডিভাইসে একটি ব্যাটারি আছে, সেটি ১০০% চার্জ হচ্ছে এবং থার্মিস্টরের তাপমাত্রা স্বাভাবিক থাকায় ডিভাইসটি ভালো অবস্থায় আছে।

বেশিরভাগ ফ্রেমওয়ার্ক এপিআই, যেগুলো এই তথ্য নিয়ে কাজ করে, সেগুলো আগের মতোই সাধারণ পরিস্থিতিগুলো সামাল দেয়: সিস্টেমটিকে চার্জিং অবস্থায় আছে বলে ধরা হয় (অর্থাৎ, এটি ব্যাটারির শক্তিতে চলছে না), এবং এর ব্যাটারি কম আছে বলে ধরা হয় না। যদি ইউজার ইন্টারফেসে ব্যাটারি আইকনটি দেখানো হয়, তবে সেটি একটি বিস্ময়সূচক চিহ্নসহ প্রদর্শিত হবে এবং ব্যাটারির শতাংশ ০% হিসাবে দেখানো হবে। কিন্তু ব্যাটারি কম থাকার কারণে ডিভাইসটি বন্ধ হবে না এবং যে কাজগুলোর জন্য চার্জিং বা ভালো ব্যাটারির প্রয়োজন, সেগুলো শিডিউল করা থাকে।

অ্যান্ড্রয়েড ৮.১ এবং এর নিচের সংস্করণ

যেহেতু ব্যাটারির অবস্থা অজানা, তাই অ্যান্ড্রয়েড ফ্রেমওয়ার্ক এপিআইগুলো সিস্টেমটিকে চার্জ হচ্ছে (বা, ব্যাটারি পাওয়ারে চলছে না) বলে ধরে নেবে এবং ব্যাটারি কম আছে বলে বিবেচনা করবে না। যদি ইউজার ইন্টারফেসে ব্যাটারি আইকনটি দেখানো হয়, তবে সেটি একটি বিস্ময়সূচক চিহ্নসহ প্রদর্শিত হবে এবং ব্যাটারির শতাংশ ০% হিসাবে দেখানো হবে। কিন্তু ব্যাটারি কম থাকার কারণে ডিভাইসটি বন্ধ হবে না এবং যে কাজগুলোর জন্য চার্জিং বা ভালো ব্যাটারির প্রয়োজন, সেগুলো নির্ধারিত হয়ে থাকবে।

বাস্তবায়ন

অ্যান্ড্রয়েড ৯-এর ডিফল্ট কোড আপনার ডিভাইসে সঠিকভাবে কাজ করতে পারে, কিন্তু পূর্বে বর্ণিত পদ্ধতি অনুযায়ী আপনার পণ্যের পাওয়ার এবং ব্যাটারির অবস্থা সঠিকভাবে প্রতিফলিত করার জন্য কার্নেল অথবা HAL-এ পরিবর্তন করার পরামর্শ দেওয়া হচ্ছে। যদি অ্যান্ড্রয়েড ৯ এবং এর পরবর্তী সংস্করণ কোনো লিনাক্স পাওয়ার সাপ্লাই ক্লাস চার্জার ডিভাইস শনাক্ত করতে না পারে, তাহলে ডিফল্টভাবে সব ধরনের চার্জারের (এসি, ইউএসবি, ওয়্যারলেস) স্ট্যাটাস অফলাইন থাকবে। যদি সব চার্জার অফলাইন থাকে কিন্তু কোনো ব্যাটারি ডিভাইস শনাক্ত না হয়, তাহলেও সিস্টেমটিকে চার্জ হচ্ছে বলে ধরে নেওয়া হবে, এই অর্থে যে এটি ব্যাটারির শক্তিতে নয়, বরং বাহ্যিক শক্তিতে চলছে, যেমনটি পূর্বে বর্ণনা করা হয়েছে।

যদি আপনার পণ্যে ব্যাটারি না থাকে এবং এটি সর্বদা একটি পাওয়ার সোর্সের সাথে সংযুক্ত থাকে, তবে এসি বা ইউএসবি পাওয়ার সোর্সের জন্য একটি লিনাক্স কার্নেল power_supply ক্লাস চার্জার ড্রাইভার প্রয়োগ করা সবচেয়ে ভালো, যা এর অনলাইন sysfs অ্যাট্রিবিউটকে ' true সেট করে। অথবা আপনি আপনার ডিভাইসের জন্য একটি Health HAL-এ এসি চার্জার অনলাইন প্রপার্টি কনফিগার করতে পারেন। একটি Health HAL-এ এসি চার্জার অনলাইন প্রপার্টি কনফিগার করার জন্য, Health AIDL HAL দেখুন।

এই কাস্টম হেলথ HAL, Health::getHealthInfo() এর একটি কাস্টম সংস্করণ প্রয়োগ করে যা BatteryProperties.chargerAcOnline = true এর মান পরিবর্তন করে।

শুরু করার জন্য, hardware/interfaces/health/aidl/default/Health.cpp ফাইলটি আপনার নিজের Health HAL ইমপ্লিমেন্টেশনে কপি করুন এবং Health AIDL HAL অনুযায়ী এটি পরিবর্তন করুন।