หน้านี้อธิบายวิธีที่ 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, ไร้สาย) เป็นออฟไลน์โดยค่าเริ่มต้น หากที่ชาร์จทั้งหมดออฟไลน์อยู่ แต่ไม่มีอุปกรณ์แบตเตอรี่ ที่ตรวจพบ ระบบจะยังถือว่ามีการชาร์จไฟในลักษณะที่ ทำงานโดยใช้พลังงานแบตเตอรี่ภายนอก ไม่ใช่พลังงานแบตเตอรี่ ตามที่อธิบายไว้ก่อนหน้านี้
หากผลิตภัณฑ์ไม่มีแบตเตอรี่และเชื่อมต่อกับแหล่งจ่ายไฟอยู่เสมอ คุณควรใช้ไดรเวอร์ charger คลาส power_supply ของเคอร์เนล Linux สำหรับแหล่งจ่ายไฟ AC หรือ USB ซึ่งตั้งค่าแอตทริบิวต์ sysfs
online เป็น true
หรือจะกำหนดค่าพร็อพเพอร์ตี้ออนไลน์ของที่ชาร์จ AC ใน HAL ของ Health สำหรับอุปกรณ์ก็ได้ โดยให้ใช้ HAL ของ Health ตามที่อธิบายไว้ในการใช้ Health 2.0
Health HAL ที่กำหนดเองนี้จะใช้เวอร์ชันที่กำหนดเองของ Health::getHealthInfo()
ที่ปรับเปลี่ยนค่า BatteryProperties.chargerAcOnline = true
คัดลอกไฟล์เพื่อเริ่มต้นใช้งาน
hardware/interfaces/health/2.0/default/Health.cpp
เกี่ยวกับการใช้งาน Health HAL ของคุณเอง และแก้ไขตาม Health 2.0
README