โหมดโรงรถ

เพื่อให้มีช่วงเวลาที่ไม่ได้ใช้งานในยาน พาหนะ โหมดโรงรถ จะทำให้ระบบตื่นตัวอยู่เสมอ เพื่อให้สามารถดำเนินการงานใน 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());

แก้ไขข้อบกพร่องโหมดโรงรถ

วิธีแก้ไขข้อบกพร่องโหมดโรงรถ:
  1. หากต้องการเปิดใช้งานหมวดหมู่การบันทึกที่เกี่ยวข้องกับโหมดโรงรถ:
    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
    
  2. หากต้องการตรวจสอบเอาต์พุต 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
    
  3. หากต้องการตรวจสอบว่าเอาต์พุต logcat เพื่อระบุว่าโหมดโรงรถเสร็จสิ้นแล้ว (ยกเลิกหรือเสร็จสมบูรณ์):
    [GarageMode]: GarageMode was canceled
    
    หรือ
    [GarageMode]: GarageMode completed normally
    

    โหมดโรงรถขึ้นอยู่กับสถานะกำลังของยานพาหนะตามที่อธิบาย ไว้ข้างต้น

  4. ตรวจสอบเอาต์พุต 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