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

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

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