หน้านี้อธิบายวิธีที่ 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 สำหรับอุปกรณ์ของคุณได้ เมื่อต้องการทำเช่นนี้ ให้ใช้ Health HAL ตามที่อธิบายไว้ใน Implementing Health 2.0
Health HAL ที่กำหนดเองนี้ใช้ Health::getHealthInfo()
เวอร์ชันที่กำหนดเองซึ่งแก้ไขค่าของ BatteryProperties.chargerAcOnline = true
ในการเริ่มต้น ให้คัดลอกไฟล์ hardware/interfaces/health/2.0/default/Health.cpp
ไปยังการใช้งาน Health HAL ของคุณเอง และแก้ไขตาม Health 2.0 README