โหมดโรงรถ

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

หาก VHAL ต้องปิดระบบก่อนที่โหมด Garage จะเสร็จสิ้น VHAL จะเกิดปัญหา SHUTDOWN_PREPARE ที่ตั้งพารามิเตอร์เป็น SHUTDOWN_IMMEDIATELYหรือSLEEP_IMMEDIATELY อุปกรณ์ การนำไปใช้งานจะใช้ในกรณีที่เฉพาะเจาะจงเท่านั้น ซึ่งโดยปกติแล้ว เมื่อทรัพยากรที่จำเป็นต่อการทำให้ระบบทำงานไม่พร้อมใช้งาน สำหรับ เช่น เมื่อความจุแบตเตอรี่ไม่เพียงพอ

โหมดโรงรถ

รูปที่ 1 ขั้นตอนของโหมดโรงรถ

นักพัฒนาแอปทำงานกับโหมด Garage อย่างไร

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

โหมด Debug Garage

วิธีแก้ไขข้อบกพร่องของโหมด Garage
  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 เพื่อระบุว่าโหมด Garage กำลังเริ่มต้น
    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 เพื่อระบุว่าโหมด Garage สิ้นสุดแล้ว (ยกเลิกหรือ เสร็จสมบูรณ์):
    [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