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

इस पेज पर बताया गया है कि 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%
सेहत कोई जानकारी नहीं अच्छा
एसी चार्जर का ऑनलाइन स्टेटस बदलाव नहीं किया गया 'सही' पर सेट किया गया

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

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

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

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

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

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

लागू करना

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

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

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

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