बैटरी के बिना काम करने वाले डिवाइसों के साथ काम करना

इस पेज पर बताया गया है कि Android, उन प्रॉडक्ट को कैसे मैनेज करता है जिनमें बैटरी निकाली जा सकती है या जिनमें इंटरनल बैटरी नहीं होती. इसके बजाय, इन डिवाइसों को किसी बाहरी पावर सोर्स से कनेक्ट किया जाता है. जैसे, एसी पावर आउटलेट या किसी दूसरे डिवाइस पर मौजूद यूएसबी पोर्ट.

क्या बैटरी मौजूद है?

ऐप्लिकेशन, यहां दिए गए कोड का इस्तेमाल करके यह पता लगा सकते हैं कि डिवाइस में बैटरी है या नहीं:

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

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

बिना बैटरी वाले डिवाइस का बिहेवियर

अगर Android को आपके प्रॉडक्ट के लिए बैटरी वाला डिवाइस नहीं मिलता है, तो बैटरी से जुड़ी इन डिफ़ॉल्ट वैल्यू का इस्तेमाल किया जाता है. ध्यान दें कि Android 9 की रिलीज़ में डिफ़ॉल्ट सेटिंग बदल गई हैं. इस टेबल में, दोनों के बीच के अंतर दिखाए गए हैं.

बैटरी की स्थिति Android 9 और उसके बाद के वर्शन Android 8.1 और इससे पहले के वर्शन
स्क्रीन दिखाएं गलत सही
स्टेटस पता नहीं चार्ज किया जा रहा है
बची हुई क्षमता 0 100%
सेहत पता नहीं अच्छा
एसी चार्जर का ऑनलाइन स्टेटस बदलाव नहीं किया गया forced to true

मैन्युफ़ैक्चरर, कर्नल power_supply ड्राइवर या Health HAL का इस्तेमाल करके, डिफ़ॉल्ट सेटिंग में बदलाव कर सकते हैं.

Android 9 और उसके बाद के वर्शन

Android 9 में, बिना बैटरी वाले डिवाइसों के लिए कुछ पुराने कोड हटा दिए गए हैं. इन कोड की वजह से, डिवाइस में बैटरी मौजूद होने का दिखावा किया जाता था. साथ ही, यह भी दिखाया जाता था कि बैटरी 100% चार्ज हो गई है और बैटरी की सेहत अच्छी है. इसके अलावा, थर्मिस्टर पर बैटरी का तापमान सामान्य दिखाया जाता था.

इस जानकारी को मैनेज करने वाले ज़्यादातर फ़्रेमवर्क एपीआई, सामान्य स्थितियों को पहले की तरह ही मैनेज करते रहेंगे: सिस्टम को चार्जिंग मोड में माना जाएगा. इसका मतलब है कि यह बैटरी पावर पर नहीं चल रहा है. साथ ही, इसे कम बैटरी वाला नहीं माना जाएगा. अगर यूज़र इंटरफ़ेस, बैटरी का आइकॉन दिखाता है, तो यह विस्मयादिबोधक चिह्न के साथ दिखेगा. साथ ही, बैटरी का प्रतिशत 0% के तौर पर दिखेगा. हालांकि, बैटरी कम होने की वजह से डिवाइस बंद नहीं होगा. साथ ही, जिन कामों के लिए चार्जिंग या अच्छी बैटरी की ज़रूरत होती है उन्हें शेड्यूल किया जाता है.

Android 8.1 और इससे पहले के वर्शन

बैटरी की स्थिति के बारे में जानकारी न होने की वजह से, Android फ़्रेमवर्क एपीआई सिस्टम को चार्जिंग मोड में मानेंगे (यानी कि बैटरी से नहीं चल रहा है). साथ ही, इसे कम बैटरी वाला नहीं माना जाएगा. अगर यूज़र इंटरफ़ेस (यूआई) पर बैटरी का आइकॉन दिखता है, तो यह विस्मयादिबोधक चिह्न के साथ दिखेगा. साथ ही, बैटरी का प्रतिशत 0% के तौर पर दिखेगा. हालांकि, बैटरी कम होने की वजह से डिवाइस बंद नहीं होगा. साथ ही, जिन कामों के लिए चार्जिंग या बैटरी का सही होना ज़रूरी है उन्हें शेड्यूल किया जाता है.

लागू करना

Android 9 का डिफ़ॉल्ट कोड आपके डिवाइस के लिए ठीक से काम कर सकता है. हालांकि, हमारा सुझाव है कि आप कर्नल या HAL में बदलाव करें, ताकि आपके प्रॉडक्ट की बैटरी और पावर की स्थिति सही तरीके से दिखे. इसके बारे में पहले बताया जा चुका है. अगर Android 9 और उसके बाद के वर्शन वाले डिवाइस में, Linux पावर सप्लाई क्लास चार्जर डिवाइस का पता नहीं चलता है, तो डिफ़ॉल्ट रूप से सभी तरह के चार्जर (एसी, यूएसबी, वायरलेस) का स्टेटस ऑफ़लाइन होगा. अगर सभी चार्जर ऑफ़लाइन हैं, लेकिन बैटरी वाला कोई डिवाइस नहीं मिला है, तो सिस्टम को अब भी चार्जिंग मोड में माना जाएगा. ऐसा इसलिए, क्योंकि यह बैटरी से नहीं, बल्कि बाहरी पावर सोर्स से चल रहा है. इसके बारे में पहले बताया जा चुका है.

अगर आपके प्रॉडक्ट में बैटरी नहीं है और वह हमेशा पावर सोर्स से कनेक्ट रहता है, तो एसी या यूएसबी पावर सोर्स के लिए Linux कर्नल power_supply क्लास charger ड्राइवर को लागू करना सबसे अच्छा होता है. यह ड्राइवर, online sysfs एट्रिब्यूट को true पर सेट करता है. इसके अलावा, अपने डिवाइस के लिए Health HAL में एसी चार्जर की ऑनलाइन प्रॉपर्टी को कॉन्फ़िगर किया जा सकता है. हेल्थ एचएएल में एसी चार्जर की ऑनलाइन प्रॉपर्टी को कॉन्फ़िगर करने के लिए, हेल्थ एआईडीएल एचएएल देखें.

यह कस्टम हेल्थ एचएएल, Health::getHealthInfo() का कस्टम वर्शन लागू करता है. यह BatteryProperties.chargerAcOnline = true की वैल्यू में बदलाव करता है.

शुरू करने के लिए, फ़ाइल hardware/interfaces/health/aidl/default/Health.cpp को अपने Health HAL में कॉपी करें और Health AIDL HAL के हिसाब से उसमें बदलाव करें.