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

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

ผู้ผลิตอาจปรับเปลี่ยนการตั้งค่าเริ่มต้นใช้เคอร์เนล power_supply ไดรเวอร์หรือ สุขภาพ HAL

Android 9 ขึ้นไป

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

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

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

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

การดำเนินการ

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

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

ที่กำหนดเองนี้สุขภาพ HAL ดำเนินการรุ่นที่กำหนดเองของ Health::getHealthInfo() ที่ปรับเปลี่ยนค่าของ BatteryProperties.chargerAcOnline = true

ในการเริ่มต้นคัดลอกแฟ้ม hardware/interfaces/health/2.0/default/Health.cpp เพื่อตัวเองการดำเนินงานสุขภาพ HAL ของคุณและปรับเปลี่ยนได้ตามที่ สุขภาพ 2.0 README