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

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