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

หน้านี้อธิบายวิธีที่ Android จัดการผลิตภัณฑ์ที่มีแบตเตอรี่ที่ถอดออกได้หรือไม่มีแบตเตอรี่ภายใน ส่วนอุปกรณ์หลังจะเชื่อมต่อกับ แหล่งจ่ายไฟภายนอกแทน เช่น เต้ารับไฟฟ้ากระแสสลับหรือพอร์ต 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 และต่ำกว่า

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

การใช้งาน

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

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

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

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