รองรับอุปกรณ์ที่ไม่มีแบตเตอรี่

หน้านี้จะอธิบายวิธีที่ Android จัดการผลิตภัณฑ์ที่มีแบตเตอรี่แบบถอดออกได้หรือไม่มีแบตเตอรี่ภายใน อุปกรณ์หลังจะเชื่อมต่อกับแหล่งจ่ายไฟภายนอกแทน เช่น เต้ารับ AC หรือพอร์ต USB บนอุปกรณ์อื่น

มีแบตเตอรี่อยู่ไหม

แอปพลิเคชันอาจใช้โค้ดต่อไปนี้เพื่อตรวจหาว่าอุปกรณ์มีแบตเตอรี่หรือไม่

```
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%
สุขภาพ ไม่ทราบ ดี
สถานะออนไลน์ของที่ชาร์จ AC ไม่ได้แก้ไข บังคับให้เป็น "จริง"

ผู้ผลิตอาจเปลี่ยนแปลงการตั้งค่าเริ่มต้นโดยใช้ไดรเวอร์เคอร์เนล power_supply หรือ Health HAL

Android 9 ขึ้นไป

Android 9 นำโค้ดก่อนหน้านี้บางส่วนสำหรับอุปกรณ์ที่ไม่มีแบตเตอรี่ออก ซึ่งโดยค่าเริ่มต้นจะแกล้งทำเป็นว่ามีแบตเตอรี่ กำลังชาร์จ 100% และอยู่ในสถานะดีพร้อมการอ่านอุณหภูมิปกติในเทอร์มิสเตอร์

API เฟรมเวิร์กส่วนใหญ่ที่จัดการข้อมูลนี้จะยังคงจัดการสถานการณ์ทั่วไปเหมือนเดิม นั่นคือ ระบบจะถือว่ากำลังชาร์จ (ไม่ได้ใช้พลังงานจากแบตเตอรี่) และจะไม่ถือว่ามีแบตเตอรี่เหลือน้อย หากอินเทอร์เฟซผู้ใช้วาดไอคอนแบตเตอรี่ ไอคอนดังกล่าวจะปรากฏขึ้นพร้อมเครื่องหมายตกใจ และเปอร์เซ็นต์แบตเตอรี่จะแสดงเป็น 0% แต่อุปกรณ์จะไม่ปิดเนื่องจากแบตเตอรี่เหลือน้อย และระบบจะกำหนดเวลางานที่ต้องชาร์จแบตเตอรี่หรือแบตเตอรี่ต้องเต็ม

Android 8.1 และต่ำกว่า

เนื่องจากไม่ทราบสถานะแบตเตอรี่ API ของเฟรมเวิร์ก Android จะถือว่าระบบกำลังชาร์จ (หรือไม่ได้ทำงานโดยใช้พลังงานจากแบตเตอรี่) และจะไม่ถือว่าแบตเตอรี่เหลือน้อย หากอินเทอร์เฟซผู้ใช้แสดงผลไอคอนแบตเตอรี่ ไอคอนจะปรากฏขึ้นพร้อมกับเครื่องหมายตกใจ และเปอร์เซ็นต์แบตเตอรี่จะแสดงเป็น 0% แต่อุปกรณ์จะไม่ปิดเนื่องจากแบตเตอรี่เหลือน้อย และระบบจะกำหนดเวลางานที่ต้องชาร์จหรือแบตเตอรี่เต็ม

การใช้งาน

โค้ดเริ่มต้นของ Android 9 อาจทํางานได้อย่างถูกต้องกับอุปกรณ์ของคุณ แต่ขอแนะนําให้ทําการเปลี่ยนแปลงเคอร์เนลหรือ HAL เพื่อแสดงสถานะพลังงานและแบตเตอรี่ของผลิตภัณฑ์อย่างถูกต้องตามที่อธิบายไว้ก่อนหน้านี้ หาก Android 9 ขึ้นไปไม่ตรวจพบอุปกรณ์ชาร์จประเภทแหล่งจ่ายไฟ Linux อุปกรณ์ชาร์จทุกประเภท (AC, USB, ไร้สาย) จะมีสถานะออฟไลน์โดยค่าเริ่มต้น หากที่ชาร์จทั้งหมดออฟไลน์แต่ไม่มีการตรวจพบอุปกรณ์ที่ใช้แบตเตอรี่ ระบบจะยังคงถือว่าอุปกรณ์กำลังชาร์จอยู่ ในแง่ที่ว่าอุปกรณ์ทำงานโดยใช้แหล่งจ่ายไฟภายนอก ไม่ใช่แบตเตอรี่ ตามที่อธิบายไว้ก่อนหน้านี้

หากผลิตภัณฑ์ไม่มีแบตเตอรี่และเชื่อมต่อกับแหล่งจ่ายไฟอยู่เสมอ คุณควรใช้ไดรเวอร์ charger คลาส power_supply ของเคอร์เนล Linux สำหรับแหล่งจ่ายไฟ AC หรือ USB ที่กำหนดแอตทริบิวต์ sysfs online เป็น true หรือจะกำหนดค่าพร็อพเพอร์ตี้ออนไลน์ของที่ชาร์จ AC ใน HAL ของ Health สำหรับอุปกรณ์ก็ได้ หากต้องการกำหนดค่าพร็อพเพอร์ตี้ออนไลน์ของที่ชาร์จ AC ใน HAL ของ Health โปรดดูHealth AIDL HAL

HAL สำหรับสุขภาพที่กำหนดเองนี้ใช้ Health::getHealthInfo() เวอร์ชันที่กำหนดเองซึ่งแก้ไขค่าของ BatteryProperties.chargerAcOnline = true

ในการเริ่มต้นใช้งาน ให้คัดลอกไฟล์ hardware/interfaces/health/aidl/default/Health.cpp ไปยังการใช้งาน Health HAL ของคุณเอง แล้วแก้ไขตาม Health AIDL HAL