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

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

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

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

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

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

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

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

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

Android 8.1 और उससे पहले वाले वर्शन के लिए

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

लागू करना

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

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

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

शुरू करने के लिए, फ़ाइल hardware/interfaces/health/2.0/default/Health.cpp को अपने हेल्थ एचएएल लागू करने के तरीके में कॉपी करें और उसमें Health 2.0 README के मुताबिक बदलाव करें.