इस पेज पर बताया गया है कि 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 और इससे पहले के वर्शन |
---|---|---|
स्क्रीन दिखाएं | गलत | true |
स्टेटस | बैटरी लेवल की जानकारी नहीं है | बैटरी चार्ज हो रही है |
बची हुई क्षमता | 0 | 100% |
सेहत | बैटरी लेवल की जानकारी नहीं है | अच्छा |
एसी चार्जर का ऑनलाइन स्टेटस | बदलाव नहीं किया गया | 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::getHealthInfo()
का कस्टम वर्शन लागू करता है. यह BatteryProperties.chargerAcOnline = true
की वैल्यू में बदलाव करता है.
शुरू करने के लिए, फ़ाइल को कॉपी करें
hardware/interfaces/health/aidl/default/Health.cpp
अपने Health HAL के साथ लागू करें और इसे Health AIDL HAL के हिसाब से बदलें.