इस पेज पर बताया गया है कि 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 और उससे पहले वाले वर्शन के लिए |
---|---|---|
प्रज़ेंट | गलत | true |
स्टेटस | कोई जानकारी नहीं | बैटरी चार्ज हो रही है |
बची हुई क्षमता | 0 | 100% |
सेहत | कोई जानकारी नहीं | अच्छा |
एसी चार्जर की ऑनलाइन स्थिति | बदलाव नहीं किया गया | ज़बरदस्ती लागू की गई |
मैन्युफ़ैक्चरर, कर्नेल power_supply ड्राइवर या Health HAL का इस्तेमाल करके, डिफ़ॉल्ट सेटिंग में बदलाव कर सकते हैं.
Android 9 और उसके बाद के वर्शन के लिए
Android 9, बैटरी वाले बिना बैटरी वाले डिवाइसों के कुछ पुराने कोड हटा देता है. ये कोड, डिफ़ॉल्ट तौर पर यह मानकर चलते हैं कि उनमें कोई बैटरी मौजूद है, उसकी बैटरी 100% चार्ज है, और वह डिवाइस के थर्मिस्टर पर सामान्य तापमान के हिसाब से अच्छी स्थिति में था.
इस जानकारी से जुड़े ज़्यादातर फ़्रेमवर्क एपीआई सामान्य स्थितियों को पहले की तरह ही हैंडल करते हैं: सिस्टम को चार्जिंग माना जाता है (यानी, बैटरी पावर पर नहीं चल रहा है) और उसे कम बैटरी नहीं माना जाएगा. अगर यूज़र इंटरफ़ेस पर बैटरी का आइकॉन दिखाया जाता है, तो वह विस्मयादिबोधक चिह्न के साथ दिखेगा. साथ ही, बैटरी का प्रतिशत 0% के तौर पर दिखेगा. लेकिन बैटरी कम होने के कारण डिवाइस बंद नहीं होगा और चार्ज करने या अच्छी बैटरी की ज़रूरत वाले काम शेड्यूल किए जाएंगे.
Android 8.1 और उससे पहले वाले वर्शन के लिए
बैटरी की स्थिति की जानकारी नहीं है. इसलिए, Android फ़्रेमवर्क के एपीआई यह मानेंगे कि सिस्टम चार्ज हो रहा है या बैटरी पावर का इस्तेमाल नहीं कर रहा है. साथ ही, बैटरी कम नहीं होगी. अगर यूज़र इंटरफ़ेस, बैटरी आइकॉन को रेंडर करता है, तो यह विस्मयादिबोधक चिह्न के साथ दिखेगा. साथ ही, बैटरी का प्रतिशत 0% के तौर पर दिखेगा. लेकिन बैटरी कम होने के कारण डिवाइस बंद नहीं होगा और चार्ज करने या अच्छी बैटरी की ज़रूरत वाले काम शेड्यूल किए जा सकते हैं.
लागू करना
Android 9 का डिफ़ॉल्ट कोड आपके डिवाइस के लिए ठीक तरह से काम कर सकता है. हालांकि, हमारा सुझाव है कि आप कर्नेल या एचएएल में बदलाव करें. इससे आपके प्रॉडक्ट की बैटरी और पावर की स्थिति के बारे में सटीक जानकारी मिलेगी, जैसा कि पहले बताया गया है. अगर Android 9 और उसके बाद के वर्शन को Linux पावर सप्लाई क्लास चार्जर डिवाइस का पता नहीं चलता, तो डिफ़ॉल्ट रूप से सभी तरह के चार्जर (एसी, यूएसबी, वायरलेस) का स्टेटस ऑफ़लाइन होगा. अगर सभी चार्जर ऑफ़लाइन हैं, लेकिन बैटरी वाले किसी डिवाइस का पता नहीं चल पाया है, तो भी यह माना जाएगा कि सिस्टम चार्ज हो रहा है, न कि बैटरी पावर का, जैसा कि पहले बताया गया है.
अगर आपके प्रॉडक्ट में बैटरी नहीं है और वह हमेशा पावर
सोर्स से कनेक्ट रहता है, तो एसी या यूएसबी पावर सोर्स के लिए, Linux kernel power_supply class charger
ड्राइवर का इस्तेमाल करें. इससे प्रॉडक्ट के ऑनलाइन sysfs
एट्रिब्यूट को true
पर सेट किया जा सकता है. इसके अलावा, अपने डिवाइस के लिए Health HAL में AC चार्जर की ऑनलाइन प्रॉपर्टी कॉन्फ़िगर की जा सकती है. हेल्थ एचएएल में एसी चार्जर की ऑनलाइन प्रॉपर्टी कॉन्फ़िगर करने के लिए,
हेल्थ एआईडीएल एचएएल लेख पढ़ें.
यह कस्टम हेल्थ एचएएल, Health::getHealthInfo()
के एक कस्टम वर्शन को लागू करता है, जो BatteryProperties.chargerAcOnline = true
की वैल्यू में बदलाव करता है.
शुरू करने के लिए, फ़ाइल hardware/interfaces/health/aidl/default/Health.cpp
को अपने हेल्थ एचएएल में कॉपी करें और उसमें हेल्थ एआईडीएल एचएएल के मुताबिक बदलाव करें.