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