คู่มือการผสานรวมสำหรับ OEM

หน้านี้อธิบายวิธีประมวลผลการป้อนข้อมูลด้วยปุ่มหมุนใน VHAL, กำหนดค่าบิลด์ ให้รวมบริการแบบหมุนและวิธีปรับแต่งประสบการณ์แบบหมุนในทุกแอป สำหรับแอป OEM ที่ติดตั้งไว้ล่วงหน้า เช่น Launcher จาก OEM โปรดดู Car UI Library (car-ui-library)

VHAL

ตัวควบคุมแบบหมุนรองรับการทำงานต่อไปนี้

  • เลื่อนขึ้น ลง ซ้าย และขวา
  • หมุนตามเข็มนาฬิกาและทวนเข็มนาฬิกา
  • กดปุ่มกลาง
  • กดปุ่มย้อนกลับ
  • กดปุ่มหน้าแรก
  • กดปุ่มอื่นๆ เช่น โทรศัพท์และสื่อ

ดู hardware/interfaces/automotive/vehicle/2.0/types.hal สำหรับเอกสารเกี่ยวกับ คุณสมบัติของระบบและ int32Values ที่เกี่ยวข้อง

VHAL ควรจัดการกับการดำเนินการต่อไปนี้

ถองศอก

เมื่อผู้ใช้ดันตัวควบคุมแบบหมุนไปทางขวา VHAL ควรใช้ พร็อพเพอร์ตี้ HW_KEY_INPUT ที่มี int32Values ต่อไปนี้เพื่อส่ง เหตุการณ์ใน Android:

  1. ACTION_DOWN
  2. KEYCODE_SYSTEM_NAVIGATION_RIGHT
  3. การแสดงผลเป้าหมาย

เมื่อผู้ใช้ปล่อยตัวควบคุมแบบหมุน VHAL ควรใช้คุณสมบัติเดียวกันและ รหัสคีย์ด้วย ACTION_UP การกระตุ้นเตือนในทิศทางอื่นๆ ควรใช้ คีย์โค้ดที่เกี่ยวข้อง

ไม่มีรหัสคีย์สำหรับเส้นทแยงมุม แต่ VHAL สามารถรวมแนวนอนและแนวตั้งเข้าด้วยกัน เหตุการณ์ที่ทำให้เกิดเส้นทแยงมุมหากฮาร์ดแวร์รองรับเส้นทแยงมุม ตัวอย่างเช่น การกระตุ้นเตือน และทางด้านซ้ายควรสร้าง

  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN

ในลำดับการปล่อย (และหลังจากนั้น) ตัวควบคุมแบบหมุนควรมีลักษณะดังนี้

  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
  • HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP

ผู้ใช้สามารถดันตัวควบคุมแบบหมุนในทิศทางตั้งฉากก่อนที่จะปล่อยมือ ตัวอย่างเช่น สถานการณ์ต่อไปนี้

วันที่ ทิศทางตั้งฉาก
รูปที่ 1 ทิศทางตั้งฉาก

ซึ่งควรสร้างลำดับเหตุการณ์ต่อไปนี้

  1. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_DOWN
  2. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_DOWN
  3. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_LEFT ACTION_UP
  4. HW_KEY_INPUT KEYCODE_SYSTEM_NAVIGATION_UP ACTION_UP

ไม่ควรสร้างเหตุการณ์ที่เกิดซ้ำขณะถือตัวควบคุมแบบหมุน ในทิศทางเดียว

หมุน

เมื่อผู้ใช้หมุนตัวควบคุมแบบหมุนตามเข็มนาฬิกาด้วยตัวยึด 1 ตัว (คลิก) VHAL ควรใช้พร็อพเพอร์ตี้ HW_ROTARY_INPUT กับ int32Values ต่อไปนี้ ในการส่งเหตุการณ์ไปยัง Android ให้ทำดังนี้

  1. ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
  2. กักขังหนึ่ง (1) รายการ
  3. การแสดงผลเป้าหมาย

การประทับเวลาของเหตุการณ์ควรตั้งค่าเป็นเวลาที่ผ่านไปในหน่วยนาโนวินาที

การหมุนทวนเข็มนาฬิกาหนึ่ง (1) ควรทำให้เกิดเหตุการณ์เดียวกัน แต่ -1 สำหรับจำนวนผู้คุมขัง

หากการกักเก็บการหมุนในทิศทางเดียวกันหลายจุดเกิดขึ้นต่อเนื่องกันอย่างรวดเร็ว VHAL ควรรวมตัวคุมขังไว้ในเหตุการณ์เดียวเพื่อไม่ให้ระบบทำงานหนักเกินไป ในกรณีนี้ การประทับเวลาของเหตุการณ์ควรเป็นเวลาที่มีการระงับการหมุนเวียนครั้งแรก int32Values ควรประกอบด้วยจำนวนนาโนวินาทีระหว่างการกักกันติดต่อกัน การหมุน

ตัวอย่างเช่น ลำดับการหมุนต่อไปนี้

  • เมื่อถึงช่วง t0 ผู้ใช้หมุนตัวยึด 1 ตัวทวนเข็มนาฬิกา
  • ในช่วงเวลา t0 + 5 n ผู้ใช้หมุนตัวยึด 1 ตัวทวนเข็มนาฬิกา
  • ในช่วงเวลา t0 + 8 n ผู้ใช้หมุนตัวยึด 1 ตัวทวนเข็มนาฬิกา

ควรสร้างกิจกรรมนี้:

  • พร็อพเพอร์ตี้: HW_ROTARY_INPUT
  • การประทับเวลา: t0
  • int32Values:
    1. ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION
    2. -3 (กักเก็บ 3 เรือนทวนเข็มนาฬิกา)
    3. การแสดงผลเป้าหมาย
    4. 5 นาโนวินาทีระหว่างที่หนึ่งและสอง
    5. 3 นาโนวินาทีระหว่างเขตกักบริเวณที่ 2 และ 3

ปุ่มกลาง

เมื่อผู้ใช้กดปุ่มกลาง VHAL ควรใช้ HW_KEY_INPUT ที่มี int32Values ต่อไปนี้เพื่อส่งเหตุการณ์ไปยัง Android

  1. ACTION_DOWN
  2. KEYCODE_DPAD_CENTER
  3. การแสดงผลเป้าหมาย

เมื่อผู้ใช้ปล่อยตัวควบคุมแบบหมุน VHAL ควรใช้คุณสมบัติเดียวกัน และรหัสคีย์ด้วย ACTION_UP

อย่าสร้างเหตุการณ์ที่เกิดซ้ำเมื่อกดปุ่มกลางค้างไว้

ปุ่มย้อนกลับ

เมื่อผู้ใช้กดปุ่มย้อนกลับ VHAL ควรใช้ HW_KEY_INPUT ที่มี int32Values ต่อไปนี้เพื่อส่งเหตุการณ์ไปยัง Android

  1. ACTION_DOWN
  2. KEYCODE_BACK
  3. การแสดงผลเป้าหมาย

เมื่อผู้ใช้ปล่อยตัวควบคุมแบบหมุน VHAL ควรใช้คุณสมบัติเดียวกัน และรหัสคีย์ด้วย ACTION_UP

ไม่ควรสร้างกิจกรรมเกิดซ้ำในขณะที่กดปุ่มกลางค้างไว้

ปุ่มหน้าหลัก

ใช้ปุ่มหน้าแรกแบบเดียวกับที่คุณใช้ปุ่ม "กลับ" แต่ใช้ KEYCODE_HOME แทน ของ KEYCODE_BACK

ปุ่มอื่นๆ

หากตัวควบคุมแบบหมุนมีปุ่มเพิ่มเติม VHAL สามารถจัดการปุ่มเหล่านั้นได้ OEM ชอบเพราะไม่ถือว่าเป็นส่วนหนึ่งของการหมุนเมื่อมองจาก Android ตามปกติจะมีการจัดการเช่นเดียวกับปุ่มย้อนกลับและปุ่มหน้าแรก แต่จะใช้รหัสคีย์ต่างกัน เช่น KEYCODE_CALL หรือ KEYCODE_MUSIC

การกำหนดค่าบิลด์

การนำทางด้วยปุ่มหมุนมีให้บริการโดยบริการการช่วยเหลือพิเศษที่ชื่อว่า RotaryService หากต้องการรวมบริการนี้ในอิมเมจระบบของอุปกรณ์ ให้เพิ่มบรรทัดต่อไปนี้ใน ไฟล์ตัวอย่าง:

PRODUCT_PACKAGES += CarRotaryController

นอกจากนี้ คุณอาจต้องรวมแพ็กเกจต่อไปนี้ไว้ในบิลด์การแก้ไขข้อบกพร่องด้วย

บริการแบบหมุนจะเปิดใช้โดยอัตโนมัติเมื่อเปิดอุปกรณ์และเมื่อผู้ใช้ เกิดสวิตช์ การดำเนินการนี้ช่วยให้มั่นใจว่าผู้ใช้จะใช้ตัวควบคุมแบบหมุนระหว่างการตั้งค่าได้

หากคุณใช้รุ่นเดียวกันสำหรับรถที่มีและไม่มีตัวควบคุมแบบหมุน เพิ่ม CarRotaryController ดังที่แสดงด้านบนเพื่อให้ระบบใส่โค้ดที่จำเป็นไว้ ในบิลด์นี้ หากต้องการป้องกันไม่ให้บริการแบบหมุนในรถที่ไม่ใช่แบบหมุน ให้สร้าง RRO แบบคงที่สำหรับวางซ้อนทรัพยากรสตริง rotaryService ใน packages/services/Car/service พร้อมกับสตริงว่าง คุณจะใช้บิลด์เดียวกัน แต่มีการกำหนดค่าผลิตภัณฑ์แยกต่างหากสำหรับอุปกรณ์แบบหมุนและไม่หมุน เฉพาะรายการหลัง รวมการวางซ้อน

การปรับแต่ง

OEM สามารถปรับแต่งตรรกะการค้นหาการโฟกัส การไฮไลต์จุดโฟกัส และรายการอื่นๆ เพิ่มเติมได้ การวางซ้อนทรัพยากรในตำแหน่งต่อไปนี้

  • Car-ui-library อยู่ใน packages/apps/Car/libs/car-ui-lib
  • RotaryService ตั้งอยู่ใน packages/apps/Car/RotaryController
  • Core ตั้งอยู่ใน frameworks/base/core

ประวัติการกระตุ้นเตือน

OEM สามารถกำหนดค่าว่าจะเปิดใช้ประวัติการกระตุ้นเตือนทั้ง 2 ประเภทหรือไม่ และหากเปิดใช้ ขนาดแคชและนโยบายวันหมดอายุ ซึ่งทำได้ด้วยการลบล้าง Car-ui-library หลายรายการ ที่ไม่ซับซ้อน

โฟกัสแคชประวัติ

(Android 11 QPR3, รถยนต์ Android 11 Android 12)
แคชต่อ FocusArea นี้จะเก็บมุมมองที่โฟกัสล่าสุดภายใน FocusArea เพื่อให้โฟกัสได้เมื่อสะกิดกลับไปที่ FocusArea แคชนี้สามารถกำหนดค่าได้โดยการซ้อนทับทรัพยากร Car-ui-library ต่อไปนี้

  • car_ui_focus_history_cache_type:
    1. แคชถูกปิดใช้
    2. แคชจะหมดอายุหลังจากผ่านไประยะหนึ่ง (ดูด้านล่าง)
    3. แคชไม่มีวันหมดอายุ
  • car_ui_focus_history_expiration_period_ms: จำนวนมิลลิวินาทีก่อนเกิดเหตุการณ์ แคชจะหมดอายุหากมีการตั้งค่าประเภทแคชเป็นสอง (2) (ดูด้านบน)

แคชประวัติ FocusArea

(Android 11 QPR3, รถยนต์ Android 11 Android 12)
แคชนี้จะเก็บประวัติของการกระตุ้นเตือนเพื่อให้การสะกิดในทิศทางตรงกันข้ามสามารถ ให้กลับไปโฟกัสที่ FocusArea เดิม สามารถกำหนดค่าแคชนี้ได้โดยวางซ้อน แหล่งข้อมูลของ car-UI-library ต่อไปนี้

  • car_ui_focus_area_history_cache_type:
    1. แคชถูกปิดใช้
    2. แคชจะหมดอายุหลังจากผ่านไประยะหนึ่ง (ดูด้านล่าง)
    3. แคชไม่มีวันหมดอายุ
  • car_ui_focus_area_history_expiration_period_ms: อีกกี่มิลลิวินาทีก่อน แคชจะหมดอายุหากมีการตั้งค่าประเภทแคชเป็น 2 (ดูด้านบน)
  • car_ui_clear_focus_area_history_when_rotating: เลือกว่าจะทำให้แคชเป็นโมฆะหรือไม่ เมื่อผู้ใช้หมุนตัวควบคุม

การหมุน

(Android 11 QPR3, รถยนต์ Android 11 Android 12)
OEM สามารถลบล้างทรัพยากรจำนวนเต็ม 2 รายการใน RotaryService เพื่อระบุว่า มีความเร่ง เช่น การเร่งความเร็วด้วยเมาส์ สำหรับการหมุน:

  • rotation_acceleration_3x_ms: ใช้ช่วงเวลา (เป็นมิลลิวินาที) ในการตัดสินใจ ควรให้ Google เร่งการหมุนตัวควบคุมเพื่อกักเก็บการหมุนหรือไม่ หาก ช่วงเวลาระหว่างตัวกักเก็บนี้จนถึงการกักเก็บการหมุนก่อนหน้านี้น้อยกว่าค่านี้ ก็จะถือว่าเป็นที่พัก 3 แห่งของการหมุน ตั้งค่าเป็น 2147483647 เพื่อปิดใช้ 3× การเร่งความเร็ว
  • rotation_acceleration_2x_ms: คล้ายกับ rotation_acceleration_3x_ms ใช้ในการเร่งความเร็ว 2× ตั้งค่าเป็น 2147483647 เพื่อปิดใช้การเร่งความเร็ว 2×

การเร่งความเร็วจะทำงานได้ดีที่สุดเมื่อมีการประทับเวลาแยกสำหรับแต่ละที่เก็บ การหมุนเป็น จำเป็น โดย VHAL หากไม่มีเหล่านี้ RotaryService จะถือว่าผู้คุมขังของ การหมุนจะเว้นระยะห่างเท่าๆ กัน

/**
     * Property to feed H/W rotary events to android
     *
     * int32Values[0] : RotaryInputType identifying which rotary knob rotated
     * int32Values[1] : number of detents (clicks), positive for clockwise,
     *                  negative for counterclockwise
     * int32Values[2] : target display defined in VehicleDisplay. Events not
     *                  tied to specific display must be sent to
     *                  VehicleDisplay#MAIN.
     * int32values[3 .. 3 + abs(number of detents) - 2]:
     *                  nanosecond deltas between pairs of consecutive detents,
     *                  if the number of detents is > 1 or < -1
     *
     * VehiclePropValue.timestamp: when the rotation occurred. If the number of
     *                             detents is > 1 or < -1, this is when the
     *                             first detent of rotation occurred.
     *
     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
     * @data_enum RotaryInputType
     * @access VehiclePropertyAccess:READ
     */
    HW_ROTARY_INPUT = (
        0x0A20
        | VehiclePropertyGroup:SYSTEM
        | VehiclePropertyType:INT32_VEC
        | VehicleArea:GLOBAL),

โฟกัสไฮไลต์

OEM สามารถลบล้างการไฮไลต์การโฟกัสเริ่มต้นในเฟรมเวิร์กของ Android และ มีแหล่งข้อมูลหลายจุดที่ไฮไลต์อยู่ในไลบรารีรถ

ไฮไลต์โฟกัสเริ่มต้น

เฟรมเวิร์ก Android มีการไฮไลต์การมุ่งเน้นเริ่มต้นผ่านแอตทริบิวต์ selectableItemBackground ใน Theme.DeviceDefault นี้ แอตทริบิวต์อ้างอิงถึง item_background.xml ใน Core OEM สามารถวางซ้อน item_background.xml เพื่อเปลี่ยนโฟกัสเริ่มต้นซึ่งถอนออกได้

โดยปกติที่ถอนออกได้นี้ควรเป็น StateListDrawable ซึ่งจะปรับพื้นหลัง ตามการรวมรัฐต่างๆ รวมถึง android:state_focused และ android:state_pressed เมื่อผู้ใช้ใช้ตัวควบคุมแบบหมุนเพื่อ โฟกัสที่มุมมอง android:state_focused จะเป็น true แต่ android:state_pressed จะเป็น false หากผู้ใช้กด ปุ่มกลางบนตัวควบคุมแบบหมุน ทั้ง android:state_focused และ โดย android:state_pressed จะอยู่ในสถานะ true ขณะที่ผู้ใช้กดปุ่มค้างไว้ เมื่อผู้ใช้ปล่อยปุ่ม จะมีเพียง android:state_focused เท่านั้นที่จะยังคงอยู่ true

car-ui-library ใช้ธีมที่มาจาก Theme.DeviceDefault ด้วยเหตุนี้ การวางซ้อนนี้มีผลต่อแอปที่ใช้ไลบรารีนี้ และแอปที่ใช้ธีมซึ่งมาจาก Theme.DeviceDefault โดยจะไม่ส่งผลต่อแอปที่ใช้ธีมที่ไม่เกี่ยวข้อง เช่น Theme.Material

โฟกัสไฮไลต์แหล่งข้อมูลในไลบรารีรถยนต์

OEM สามารถลบล้างทรัพยากรของไลบรารีรถยนต์หลายรายการเพื่อควบคุมลักษณะการไฮไลต์จุดโฟกัส จะมองมุมมองที่มีการไฮไลต์ด้วยไฮไลต์ที่ไม่ใช่สี่เหลี่ยมผืนผ้า (เช่น ทรงกลมหรือทรงเม็ดยา) และใน แอปที่ใช้ธีมที่ไม่ได้มาจาก Theme.DeviceDefault เหล่านี้ ควรวางซ้อนแหล่งข้อมูลเพื่อให้การไฮไลต์จุดมุ่งเน้นสอดคล้องกับ ไฮไลต์โฟกัสเริ่มต้นที่ถอนออกได้

(Android 11 QPR3, รถยนต์ Android 11 Android 12)
ทรัพยากรต่อไปนี้ใช้เพื่อระบุเมื่อมุมมองโฟกัสแต่ไม่กด

  • car_ui_rotary_focus_fill_color: เติมสี
  • car_ui_rotary_focus_stroke_color: สีขอบ
  • car_ui_rotary_focus_stroke_width: ความหนาของโครงร่าง

(Android 11 QPR3, รถยนต์ Android 11 Android 12)
ทรัพยากรต่อไปนี้ใช้เพื่อระบุเมื่อมุมมองถูกโฟกัสและการกด

  • car_ui_rotary_focus_pressed_fill_color: เติมสี
  • car_ui_rotary_focus_pressed_stroke_color: สีขอบ
  • car_ui_rotary_focus_pressed_stroke_width: ความหนาของโครงร่าง

บางครั้งอาจมีสีพื้นหลังแบบทึบ ปุ่มดึงดูดความสนใจของผู้ใช้ ตามที่แสดงในตัวอย่าง เพราะอาจทำให้การโฟกัสที่โฟกัสมองเห็นได้ยาก

วันที่ ปุ่มที่มีพื้นหลังสีทึบ
รูปที่ 2 ปุ่มที่มีพื้นหลังสีทึบ

ในกรณีนี้ นักพัฒนาซอฟต์แวร์สามารถระบุการไฮไลต์การโฟกัสที่กำหนดเองโดยใช้ สีรอง:
  • (Android 11 QPR3, รถยนต์ Android 11 Android 12)

    car_ui_rotary_focus_fill_secondary_color car_ui_rotary_focus_stroke_secondary_color
  • (Android 12)

    car_ui_rotary_focus_pressed_fill_secondary_color car_ui_rotary_focus_pressed_stroke_secondary_color

สีใดสีหนึ่งสามารถเป็นแบบโปร่งใส ส่วนมิติข้อมูลใดสีหนึ่งสามารถเป็น 0 ได้ ตัวอย่างเช่น ต้องการแค่เติมพื้น หรือโครงร่างเท่านั้น

ไฮไลต์ FocusArea

(Android 11 QPR3, รถยนต์ Android 11 Android 12)
FocusArea จะวาดไฮไลต์ได้ 2 ประเภทเมื่อองค์ประกอบที่สืบทอดมา 1 ประเภทคือ โฟกัสอยู่ คุณทั้งสองสามารถใช้ร่วมกันได้หากต้องการ ฟีเจอร์นี้ปิดใช้อยู่โดยค่าเริ่มต้นใน AOSP ได้ แต่จะเปิดใช้ได้โดยการลบล้างทรัพยากรของ car-UI-library

  • car_ui_enable_focus_area_foreground_highlight: วาดไฮไลต์ที่ด้านบนของ FocusArea และองค์ประกอบสืบทอด ใน AOSP เนื้อหาที่ถอนออกได้นี้เป็นแบบเค้าโครง รอบๆ FocusArea OEM สามารถแทนที่ ถอนออกได้ car_ui_focus_area_foreground_highlight
  • car_ui_enable_focus_area_background_highlight: วาดไฮไลต์ที่ด้านบนของ FocusArea แต่อยู่หลังองค์ประกอบสืบทอด ใน AOSP เนื้อหาที่ถอนออกได้นี้คือการเติมแบบทึบ OEM ลบล้างเนื้อหาที่ถอนออกได้ของ car_ui_focus_area_background_highlight

ตัวแก้ไขวิธีการป้อนข้อมูล

ตัวแก้ไขวิธีการป้อนข้อมูล (IME) เป็นวิธีการป้อนข้อมูล เช่น แป้นพิมพ์บนหน้าจอ

(Android 11 QPR3, รถยนต์ Android 11 Android 12)
OEM ต้องซ้อนทับทรัพยากรสตริง default_touch_input_method ใน RotaryService เพื่อระบุ ComponentName ของ IME แบบการแตะ ตัวอย่างเช่น หาก OEM ใช้ IME ที่มาจาก Android Automotive ควรระบุ com.google.android.apps.automotive.inputmethod/.InputMethodService

(Android 11 QPR3, รถยนต์ Android 11 Android 12)
หาก OEM ได้สร้าง IME สำหรับการหมุนโดยเฉพาะ ก็ควรระบุ ComponentName ในทรัพยากร rotary_input_method หากแหล่งข้อมูลนี้ วางซ้อนไว้ ระบบจะใช้ IME ที่ระบุเมื่อใดก็ตามที่ผู้ใช้โต้ตอบกับระบบเครื่องเสียง ผ่านการกระตุ้นเตือน การหมุน และปุ่มกลางของตัวควบคุมแบบหมุน เมื่อผู้ใช้แตะ หน้าจอ IME ก่อนหน้านี้จะถูกใช้ ปุ่มย้อนกลับ (และปุ่มอื่นๆ บนปุ่มหมุน ) จะไม่มีผลต่อการเลือก IME หากทรัพยากรนี้ไม่ได้ซ้อนทับ จะไม่มีการสลับ IME เกิดขึ้น กล่องกระดาษไม่รองรับปุ่มหมุน ดังนั้นผู้ใช้จะป้อนข้อความผ่านปุ่มหมุนไม่ได้ หาก OEM ไม่ได้ให้ IME แบบหมุน

RotaryIME คือ IME แบบหมุนการสาธิต แม้จะเป็นแบบพื้นฐาน แต่ก็เพียงพอแล้วที่จะ ให้ลองใช้การสลับ IME อัตโนมัติที่อธิบายข้างต้น ซอร์สโค้ดของ RotaryIME สามารถพบได้ใน packages/apps/Car/tests/RotaryIME/

การกระตุ้นเตือนนอกหน้าจอ

โดยค่าเริ่มต้น เมื่อผู้ใช้พยายามขยับออกจากขอบหน้าจอจะไม่มีอะไรเกิดขึ้น OEM สามารถกำหนดค่าสิ่งที่ควรเกิดขึ้นใน 4 ทิศทางนี้ได้ด้วยการระบุ ชุดค่าผสมของ:

  1. การดำเนินการส่วนกลางที่ AccessibilityService กำหนด ตัวอย่างเช่น GLOBAL_ACTION_BACK
  2. รหัสคีย์ เช่น KEYCODE_BACK
  3. ความตั้งใจที่จะเปิดกิจกรรมที่แสดงเป็น URL

(Android 11 QPR3, รถยนต์ Android 11 Android 12)
ซึ่งสามารถระบุได้โดยการซ้อนทับทรัพยากรอาร์เรย์ต่อไปนี้ใน RotaryService:

  • off_screen_nudge_global_actions: อาร์เรย์ของการดำเนินการร่วมที่จะดำเนินการเมื่อ ผู้ใช้เลื่อนขึ้น ลง ไปทางซ้าย หรือไปทางขวาจากขอบของหน้าจอ ไม่มีการดำเนินการส่วนกลาง ถ้าองค์ประกอบที่เกี่ยวข้องของอาร์เรย์นี้คือ -1
  • off_screen_nudge_key_codes: อาร์เรย์ของโค้ดคีย์ของเหตุการณ์การคลิกที่จะแทรก เมื่อผู้ใช้เลื่อนขึ้น ลง ไปทางซ้าย หรือไปทางขวาจากขอบของหน้าจอ ไม่มีกิจกรรมที่ มีการแทรกถ้าองค์ประกอบที่เกี่ยวข้องของอาร์เรย์นี้เป็น 0 (KEYCODE_UNKNOWN)
  • off_screen_nudge_intents: อาร์เรย์ของ Intent ที่จะเปิดกิจกรรมเมื่อ ผู้ใช้เลื่อนหน้าจอขึ้น ลง ซ้าย หรือขวา ไม่มีกิจกรรมที่ เปิดขึ้นถ้าองค์ประกอบที่เกี่ยวข้องของอาร์เรย์นี้ว่างเปล่า

การกำหนดค่าอื่นๆ

คุณควรวางซ้อนทรัพยากร RotaryService ต่อไปนี้

  • (Android 11 QPR3, รถยนต์ Android 11 Android 12)
    config_showHeadsUpNotificationOnBottom: ค่าบูลีนที่ใช้ระบุว่า การแจ้งเตือนล่วงหน้าควรแสดงที่ด้านล่าง ไม่ใช่ด้านบน ต้อง มีค่าเดียวกับ config_showHeadsUpNotificationOnBottom ทรัพยากรบูลีนใน วันที่ frameworks/base/packages/CarSystemUI/res/values/config.xml
  • (Android 11 QPR3, รถยนต์ Android 11 Android 12)
    notification_headsup_card_margin_horizontal: ระยะขอบซ้ายและขวาสำหรับ หน้าต่างแจ้งเตือนล่วงหน้า ต้องมีค่าเหมือนกับ ทรัพยากร notification_headsup_card_margin_horizontal นาฬิกาใน วันที่ packages/apps/Car/Notification/res/values/dimens.xml
  • (Android 12)
    excluded_application_overlay_window_titles: อาร์เรย์ของ ชื่อของหน้าต่างที่ไม่ถือว่าเป็นหน้าต่างซ้อนทับ โดยควรมีชื่อ ของหน้าต่างแอปที่แสดงถึง TaskViews หรือ TaskDisplayAreas โดยค่าเริ่มต้น รายการนี้จะมีเพียง "Maps" เท่านั้น

คุณวางซ้อนทรัพยากร RotaryService ต่อไปนี้ได้

  • (Android 11 QPR3, รถยนต์ Android 11 Android 12)
    long_press_ms: ค่าจำนวนเต็มที่แสดงจำนวนมิลลิวินาทีที่ ต้องกดปุ่มกลางค้างไว้เพื่อเรียกใช้การกดค้าง ศูนย์หมายถึงระบบ ควรใช้ระยะหมดเวลาของการกดค้างที่เป็นค่าเริ่มต้น นี่คือค่าเริ่มต้น