ในการจัดเตรียมช่วงเวลาที่ไม่ได้ใช้งานในยานพาหนะ โหมดโรงรถ ช่วยให้ระบบทำงานเพื่อให้งานใน JobScheduler ถูก จำกัดด้วย ความเกียจคร้าน สามารถดำเนินการได้
โหมดโรงรถคืออะไร?
บนอุปกรณ์ที่เชื่อมต่อ เช่น โทรศัพท์ ผู้ใช้พึ่งพาระบบเพื่อให้แน่ใจว่าอุปกรณ์มีความเสถียร ทันสมัย และปรับให้เหมาะสม เพื่อให้บรรลุสถานะดังกล่าว แพลตฟอร์ม Android ให้กรอบ เวลาว่าง ในระหว่างที่แอปพลิเคชันสามารถทำงานได้เมื่อผู้ใช้ไม่โต้ตอบกับอุปกรณ์ โทรศัพท์จะถือว่า ไม่ได้ใช้งาน เมื่อผู้ใช้ไม่ได้สัมผัสโทรศัพท์เป็นเวลานาน (60 นาทีขึ้นไป) และปิดหน้าจอ ต่างจากโทรศัพท์ตรงที่รถไม่ได้ใช้งาน รถจะถูกปิด ซึ่งหมายความว่ารถไม่มีกรอบ เวลา พักเครื่อง โหมดโรงรถช่วยให้มั่นใจได้ว่าเวลาว่างในรถ
เมื่อผู้ใช้ปิดรถ ระบบจะเข้าสู่โหมดโรงรถ ในขณะที่รถอยู่ในโหมดโรงรถ ระบบจะเปิดเครื่อง หน้าจอจะปิด และงานที่ไม่ได้ใช้งานในคิว JobScheduler จะถูกดำเนินการ หากต้องการใช้งานโหมดโรงรถ โปรดดู แนวทางการใช้งานอุปกรณ์ ด้านล่าง
แนวทางการใช้งานอุปกรณ์
ในการเปิดใช้งานโหมดโรงรถ เมื่อปิดรถ HAL ของยานพาหนะ (VHAL) จะต้องส่ง AP_POWER_STATE_REQ
พร้อมสถานะ SHUTDOWN_PREPARE
โดยตั้งค่าพารามิเตอร์เป็น SHUTDOWN_ONLY
หรือ CAN_SLEEP
เพื่อให้สถานะ SHUTDOWN_PREPARE
มีผล VHAL ต้องระบุพารามิเตอร์สองตัว (สถานะและพารามิเตอร์เพิ่มเติม) สำหรับคำสั่ง AP_POWER_STATE_REQ
ซึ่งจะทำให้อุปกรณ์เข้าสู่โหมดโรงรถ ซึ่งจะตรวจจับงานที่กำหนดเวลาไว้ใน JobScheduler และป้องกันไม่ให้ระบบดำเนินการระงับหรือปิดเครื่องจนกว่างานจะเสร็จสิ้น
การใช้งานอุปกรณ์เชื่อมต่อกับเฟรมเวิร์ก Android อย่างไร
สำหรับโหมดโรงรถ เฟรมเวิร์กจะขอให้ VHAL ขยายเวลาการปิดระบบจนกว่าจะเกินระยะเวลาที่กำหนดหรืองานทั้งหมดถูกดำเนินการ ซึ่งระบบจะปิดลงในช่วงเวลานั้น ภายใต้สถานการณ์เฉพาะที่กำหนดไว้ใน CDD การใช้งานอุปกรณ์สามารถปิดระบบได้เร็วกว่า (สำหรับรายละเอียดเกี่ยวกับข้อกำหนดความเข้ากันได้ของ Android โปรดดู เอกสารข้อกำหนดความเข้ากันได้ของ Android (CDD) ) หาก VHAL ต้องปิดระบบก่อนที่โหมดโรงรถจะเสร็จสิ้น VHAL สามารถออก SHUTDOWN_PREPARE
โดยตั้งค่าพารามิเตอร์เป็น SHUTDOWN_IMMEDIATELY
หรือ SLEEP_IMMEDIATELY
การใช้งานอุปกรณ์สามารถใช้สิ่งนี้ได้ภายใต้สถานการณ์ เฉพาะเท่านั้น โดยทั่วไปเมื่อทรัพยากรที่จำเป็นเพื่อให้ระบบทำงานไม่พร้อมใช้งาน ตัวอย่างเช่น เมื่อความจุของแบตเตอรี่ไม่เพียงพอ
นักพัฒนาแอพพลิเคชั่นทำงานกับโหมดโรงรถอย่างไร?
แอปพลิเคชันและบริการจะไม่โต้ตอบกับโหมดโรงรถโดยตรง แอปจะกำหนดเวลางานใน JobScheduler แทน งานที่ถูกจำกัดด้วย ความเกียจคร้าน จะถูกดำเนินการในโหมดโรงรถ
รหัสต่อไปนี้แสดงวิธีกำหนดเวลาให้งานรันในโหมดโรงรถ:
public class MyGarageModeJob extends JobService { ... } Context context = ...; int jobId = ...; ComponentName myGarageModeJobName = new componentName(context, MyGarageModeJob.class); JobInfo.Builder infoBuilder = new JobInfo.Builder(jobId, myGarageModeJobName) .setRequiresDeviceIdle(true); // Example of an optional constraint: infoBuilder.setRequiredNetworkType(NetworkType.NETWORK_TYPE_UNMETERED); JobScheduler jobScheduler = (JobScheduler) context .getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(infoBuilder.build());
การดีบักโหมดโรงรถ
ในการดีบักโหมดโรงรถ:- การเปิดใช้งานหมวดหมู่การบันทึกที่เกี่ยวข้องกับโหมดโรงรถ:
adb shell stop adb shell setprop log.tag.GarageMode VERBOSE adb shell setprop log.tag.Finsky VERBOSE adb shell setprop log.tag.CAR.POWER VERBOSE adb shell setprop log.tag.JobScheduler.Connectivity VERBOSE adb shell start
- ในการตรวจสอบเอาต์พุต logcat เพื่อระบุว่าโหมดโรงรถกำลังเริ่มต้น:
GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode GarageMode: [Controller]: Sending broadcast with action: com.android.server.jobscheduler.GARAGE_MODE_ON
- เพื่อตรวจสอบเอาต์พุต logcat เพื่อระบุว่าโหมดโรงรถเสร็จสิ้น (ยกเลิกหรือเสร็จสิ้น):
[GarageMode]: GarageMode was canceled
หรือ[GarageMode]: GarageMode completed normally
โหมดโรงรถขึ้นอยู่กับสถานะกำลังของยานพาหนะตามที่อธิบายไว้ ข้างต้น
- ตรวจสอบเอาต์พุต logcat เพื่อระบุสถานะพลังงานที่ถูกต้อง:
CAR.POWER: starting shutdown prepare without Garage Mode GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE GarageMode: [GarageMode]: Entering GarageMode CAR.POWER: send shutdown prepare CAR.POWER: setPowerState=SHUTDOWN_PREPARE(7) param=0