หน้านี้อธิบายวิธีที่ 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