บริการปลั๊กอินระบบเสียงของรถยนต์

บริการปลั๊กอิน OEM ของรถยนต์ใหม่ใน Android 14 ช่วยให้กำหนดค่า คอมโพเนนต์บางอย่างของรถยนต์ได้ สำหรับเสียงโดยเฉพาะ เราได้เปิดตัวบริการปลั๊กอินใหม่ 3 รายการ ซึ่งช่วยให้ OEM กำหนดค่าการจัดการเสียงในอุปกรณ์ AAOS ได้อย่างยืดหยุ่น ดังนี้

  • การควบคุมโฟกัสเสียง
  • การควบคุมระดับเสียงและการปิดเสียง
  • การควบคุมการลดเสียง

สถาปัตยกรรมบริการปลั๊กอินของรถยนต์

รูปภาพด้านล่างแสดงภาพรวมของบริการรถยนต์และความสัมพันธ์กับบริการรถยนต์ของ OEM กระบวนการบริการรถยนต์ของ OEM จะใช้พื้นที่กระบวนการของตัวเองเช่นเดียวกับกระบวนการของแอปและกระบวนการบริการรถยนต์

ภาพ

บริการรถยนต์จะเริ่มบริการรถยนต์ OEM โดยค้นหาคอมโพเนนต์ที่กำหนดไว้ใน config_oemCarService หากการกำหนดค่าว่างเปล่า แสดงว่าไม่มีบริการ OEM และไม่มีการเริ่มต้นบริการ คอมโพเนนต์ต้องขยาย OemCarService บริการเสียงในรถต้องเขียนทับ API สำหรับการรับบริการ OEM เสียงในรถ

public final class OemCarServiceImp extends OemCarService {
    @Override
    public OemCarAudioFocusService getOemAudioFocusService();

    @Override
    public OemCarAudioDuckingService getOemAudioDuckingService();

    @Override
    public OemCarAudioVolumeService getOemAudioVolumeService();
}

ดูตัวอย่างได้ที่ แอปทดสอบอ้างอิงที่กำหนดไว้ใน packages/services/Car/tests/OemCarServiceTestApp

แม้ว่าบริการจะเริ่มต้นโดยบริการรถยนต์ แต่ก็ไม่ได้สืบทอดสิทธิ์ที่พร้อมให้บริการแก่บริการเสียงในรถยนต์โดยอัตโนมัติ ดังนั้น บริการ OEM ควรขอสิทธิ์ที่จำเป็นด้วยกลไกที่เหมาะสม เช่น ดูที่ packages/services/Car/data/etc/com.android.car.oemcarservice.testapp.xml

บริการเครื่องเสียงรถยนต์ที่มีสถาปัตยกรรมบริการ OEM

ใน AAOS บริการเสียงของรถยนต์จะจัดการการดำเนินการต่อไปนี้

  • การกำหนดเส้นทางเสียง
  • โฟกัสอัตโนมัติ
  • การลดเสียง
  • ระดับเสียงและปิดเสียง

ก่อน Android 14 ลักษณะการทำงานนี้ส่วนใหญ่จะคงที่และ แก้ไขได้ผ่านการตั้งค่าเท่านั้น แม้ว่าจะมีเพียงบางกรณีก็ตาม Android 14 ได้เปิดตัวกลไกสำหรับบริการเสียงในรถยนต์ เพื่อสื่อสารกับคอมโพเนนต์ที่ OEM กำหนดซึ่งจัดการสิ่งต่อไปนี้

  • โฟกัสอัตโนมัติ
  • การลดเสียง
  • ระดับเสียงและปิดเสียง

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

ภาพ

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

บริการเสียงในรถยนต์ต้องจัดการกิจกรรมเสียงทั้งหมดในรถยนต์ หากบริการเสียงในรถยนต์ไม่จัดการลักษณะการทำงานของเสียงบางส่วน ข้อมูลที่แสดงต่อบริการเสียงของ OEM ในรถยนต์จะไม่สมบูรณ์ ตัวอย่างเช่น หาก OEM เขียนทับการจัดการโฟกัสเสียงในบริการรถยนต์โดยการลงทะเบียน นโยบายโฟกัสเสียงของตนเอง บริการเสียงในรถยนต์จะให้ข้อมูลที่ครบถ้วนแก่ บริการเสียงของ OEM ในรถยนต์ไม่ได้ ซึ่งอาจส่งผลต่อความสามารถของบริการเสียงของ OEM ในรถยนต์ในการตัดสินใจ เนื่องจากอาจไม่มีข้อมูลที่บริการเสียงของรถยนต์มองไม่เห็น

หากต้องการดำเนินการ บริการเสียงในรถจะเรียกใช้บริการรถยนต์ของ OEM การเรียกเหล่านี้ เกิดขึ้นในกระบวนการต่างๆ ซึ่งต้องใช้การสื่อสารระหว่างกระบวนการ (IPC) IPC จะเพิ่มเวลาในการตอบสนองให้กับการเรียกใช้แต่ละครั้ง คุณควรลดเวลาในการตอบสนองในบริการ OEM

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

คำจำกัดความของบริการเครื่องเสียงในรถยนต์ของ OEM

บริการโฟกัสเสียงในรถยนต์ของ OEM

บริการเสียงในรถยนต์จะจัดการคำขอโฟกัสเสียงจากแอปโดยการลงทะเบียน เครื่องมือฟังโฟกัสของนโยบายเสียง บริการเสียงในรถยนต์มีกลไกในการจัดการ ลักษณะการทำงานของโฟกัสตามเมทริกซ์การโต้ตอบแบบคงที่ เมทริกซ์จะกำหนดการโต้ตอบ 3 ประเภทที่แตกต่างกัน ดังนี้

  • การโต้ตอบพร้อมกัน ผู้ถือครองโฟกัสสามารถคงโฟกัสไว้ได้พร้อมกัน

  • การโต้ตอบแบบพิเศษ คำขอโฟกัสขาเข้าจะนำโฟกัสออกจาก ผู้ถือครองโฟกัสปัจจุบัน

  • ปฏิเสธการโต้ตอบ ปฏิเสธคำขอโฟกัสที่เข้ามาตามผู้ถือครองโฟกัสปัจจุบัน

แม้ว่าการดำเนินการนี้จะเพียงพอสำหรับกรณีการใช้งานยานยนต์บางอย่าง แต่ก็ไม่ตอบสนองความต้องการทั้งหมดของการโต้ตอบที่อาจแตกต่างกันเนื่องจากข้อกำหนดของ OEM เราจึงขอแนะนำOemCarAudioFocusService

public interface OEmCarAudioFocusService {
    OemCarAuddioFocusResults evaluateAudioFocusRequest(
        OemCarAudioFocusEvaluationRequest request);
    
    void notifyAudioFocusChange(
        List<AudioFocusEntry> holder,
        List<AudioFocusEntry> losers, int zoneId);
}

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

ข้อมูลนี้สามารถใช้เพื่อประเมิน newFocusRequest เมื่อเทียบกับผู้ที่ได้รับความสนใจในปัจจุบันใน focusHolders และผู้ที่เสียความสนใจในปัจจุบันใน focusLosers API ควรแสดงผลลัพธ์ต่อไปนี้

class OemCarAudioFocusResult {
    int audioZoneId;
    int audioFocusEvaluationResults;
    AudioFocusEntry focusResult;
    List<AudioFocusEntry> newLosers;
    List<AudioFocusEntry> newlyBlocked;
}

ซึ่งมีข้อมูลเกี่ยวกับผลการประเมินจริงใน audioFocusEvaluationResults ซึ่งจะระบุว่าคำขอปัจจุบันได้รับ การอนุมัติ ล่าช้า หรือไม่สำเร็จ การเปลี่ยนแปลงใดๆ ในโฟกัสสแต็กปัจจุบัน ควรตั้งค่าในรายการ newLosers และ newlyBlocked โดยขึ้นอยู่กับลักษณะ ของการเปลี่ยนแปลงสแต็ก

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

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

API ที่ 2 notifyAudioFocusChange เป็นแบบทางเดียวซึ่งจะเรียกใช้ทุกครั้งที่มี คำขอหรือการละทิ้งโฟกัสเสียง โดยส่วนใหญ่แล้ว API จะใช้เพื่อแจ้งให้ทราบถึงการเปลี่ยนแปลงโฟกัสแก่บริการ OEM ซึ่งอาจส่งผลต่อลักษณะการทำงานของบริการเสียงในรถยนต์ OEM

หลักเกณฑ์สำหรับการประเมินโฟกัส

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

  • หากไม่มีการโฟกัสเสียงที่มีลำดับความสำคัญสูงอย่างต่อเนื่อง (เช่น การโทร เหตุฉุกเฉิน หรือความปลอดภัย) แอปควรจะสามารถรับโฟกัสเสียงได้ทั้ง ชั่วคราวหรือถาวร

  • ขณะที่โฟกัสสื่อทำงานอยู่ แอปที่ขอจะทำสิ่งต่อไปนี้

    • การใช้งานการโทรควรเน้นที่การรับโฟกัสพร้อมกัน หรือแยกกัน

    • โฟกัสการใช้งานการนำทาง ควรรับโฟกัสได้พร้อมกันหรือแยกกัน

    • โฟกัสการใช้งาน Assistant ควรรับโฟกัสได้พร้อมกันหรือแยกกัน

  • ขณะที่แอปกำลังใช้งานอยู่โดยมีโฟกัสเสียงที่มีลำดับความสำคัญสูง (เช่น การโทรศัพท์ การแจ้งเตือนฉุกเฉิน หรือการแจ้งเตือนด้านความปลอดภัย) คำขอโฟกัสเสียงที่เข้ามาซึ่งล่าช้าควรได้รับอนุญาตหรือล่าช้าตามความจำเป็น

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

บริการระดับเสียงในรถยนต์ OEM

บริการเสียงในรถยนต์จะจัดการเหตุการณ์ปุ่มปรับระดับเสียงโดยการฟังการปรับระดับเสียงจากระบบเสียง หรือโดยการฟังเหตุการณ์ปุ่มปรับระดับเสียงโดยตรงจากบริการอินพุตของรถยนต์ ในแต่ละกรณี ลักษณะการทำงานเริ่มต้นของบริการเสียงในรถคือการกำหนดกลุ่มระดับเสียงที่จะเปลี่ยนตามเครื่องเล่นเสียงที่ใช้งานอยู่และรายการลำดับความสำคัญของบริบทเสียง

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

  1. การนำทาง
  2. โทร
  3. เพลง
  4. ประกาศ
  5. คำสั่งเสียง
  6. เสียงเรียกเข้า
  7. เสียงของระบบ
  8. ความปลอดภัย
  9. สัญญาณเตือน
  10. การแจ้งเตือน
  11. สถานะยานพาหนะ
  12. ฉุกเฉิน

บริการเสียงในรถยนต์มี รายการลำดับความสำคัญที่ 2 ของบริบทเสียงเพื่อลดความซับซ้อนในการจัดการเหตุการณ์สำคัญของปุ่มปรับระดับเสียง

  1. โทร
  2. สื่อ
  3. ประกาศ
  4. คำสั่งเสียง

รายการนี้จะแสดงตามลำดับจากมากไปน้อยด้วย จุดประสงค์ของรายการที่ 2 นี้ คือเพื่อให้เปลี่ยนเสียงที่ใช้กันทั่วไปได้มากขึ้นผ่านเหตุการณ์สำคัญ เสียงที่ไม่ได้ใช้กันทั่วไป ซึ่งอาจมีระยะเวลาสั้นกว่า จะจัดการได้ผ่าน UI ของการตั้งค่าเสียง เท่านั้น

คุณตั้งค่าเวอร์ชันจริงของวอลุ่มได้ด้วยการกำหนดค่า audioVolumeAdjustmentContextsVersion คุณตั้งค่าเป็น 1 หรือ 2 ก็ได้ (2 เป็นค่าเริ่มต้น)

Android 14 มีการเปิดตัวOemCarAudioVolumeServiceเพื่อเพิ่มความยืดหยุ่นในการจัดการระดับเสียง

public interface OemCarAudioVolumeService {
    OemCarvolumeChangeInfo getSuggestedGroupForVolumeChange(
OemCarAudioVolumeRequest request, int volumeAdjustment);
}

บริการระดับเสียงของระบบเสียงในรถยนต์ของ OEM มีเมธอดเดียวซึ่งรับvolumeAdjustmentและOemCarAudioVolumeRequest

class OemCarAudioVolumeRequest {
    int audioZoneId;
    int callState;
    List<AudioAttributes> activePlaybackAttributes;
    List<AudioAttributes> duckedAttributes;
    List<CarVolumeGroupInfo> volumeGroupState;
}

activePlaybackAttributes ของคำขอมีแอตทริบิวต์เสียงที่ใช้งานอยู่ duckedAttributes เป็นแอตทริบิวต์เสียงที่ลดระดับเสียงในขณะนี้ โดย volumeGroupState จะมีสถานะปัจจุบันของกลุ่มวอลุ่ม คำขอ แสดงถึงสถานะปัจจุบันของสแต็กเสียงและสามารถใช้เพื่อกำหนด กลุ่มระดับเสียงที่ควรเปลี่ยนแปลง ระบบควรแสดงผลลัพธ์ในรูปแบบต่อไปนี้ OemCarVolumeChangeInfo

class OemCarVolumeChangeInfo {
    boolean change;
    CarVolumeGroupInfo volumeGroupChanged;
}

บูลีน change ระบุว่ามีการเปลี่ยนแปลงระดับเสียงหรือไม่ ส่วน true ระบุว่า มีการเปลี่ยนแปลงและควรอัปเดตกลุ่มระดับเสียง ส่วน volumeGroupChanged คือกลุ่มระดับเสียงจริงที่ควรเปลี่ยน ควรเปลี่ยนกลุ่มนี้ตามพารามิเตอร์ volumeAdjustment เดิม ที่ส่งไปยัง API เช่น หากผลลัพธ์ระบุว่าควรปิดเสียงกลุ่มระดับเสียง การนำทาง บูลีนจะเป็น true และกลุ่มระดับเสียง ที่ส่งคืนควรเป็นกลุ่มระดับเสียงสำหรับการนำทาง

บริการลดเสียงอัตโนมัติในรถยนต์ของ OEM

บริการเสียงในรถยนต์จะจัดการการลดระดับเสียงโดยการตรวจสอบการเปลี่ยนแปลงโฟกัสเสียงและ ส่งสัญญาณไปยัง AudioControl HAL เกี่ยวกับอุปกรณ์เสียงที่จะลดระดับเสียง เมื่อโฟกัสเปลี่ยน ระบบจะประเมินผู้ถือครองโฟกัสที่ใช้งานอยู่ทั้งหมดเพื่อพิจารณา ว่าควรลดระดับเสียงของรายการใดตามชุดกฎการลดระดับเสียงแบบคงที่นี้

  • เสียงแจ้งเหตุฉุกเฉินจะลดระดับเสียงทุกอย่าง ยกเว้นเสียงการโทร
  • ฟีเจอร์ความปลอดภัยจะปิดเสียงทุกอย่างยกเว้นเสียงฉุกเฉิน
  • การนำทางจะปิดเสียงทุกอย่าง ยกเว้นเสียงด้านความปลอดภัยและเสียงฉุกเฉิน
  • ปิดเสียงทุกอย่าง ยกเว้นเสียงที่เกี่ยวข้องกับความปลอดภัย เหตุฉุกเฉิน และการนำทาง
  • Voice จะลดเสียงเรียกเข้า
  • ทุกอย่างควรลดระดับเสียงเพลงและประกาศ

กฎเหล่านี้ไม่ใช่กฎทั้งหมด และ OEM ยังคงมีหน้าที่รับผิดชอบในการพิจารณา วิธีลดระดับเสียงตามหลักเกณฑ์เหล่านี้ OEM สามารถควบคุมคำแนะนำเหล่านี้ ได้อย่างมีประสิทธิภาพมากขึ้นตามข้อกำหนดที่มี โดย OemCarDuckingService เปิดตัวใน Android 14

class OemCarAudioDuckingService {
List<AudioAttributes>   evaluateAttributesToDuck(
        OemCarAudioVolumeRequest request);
}

API นี้จะเรียกจากบริการเสียงในรถเมื่อมีการเปลี่ยนแปลงโฟกัสเสียง โดยจะใช้OemCarAudioVolumeRequestที่เปิดตัวใน บริการระดับเสียงในรถยนต์ของ OEM อีกครั้ง และมีข้อมูลที่เกี่ยวข้อง เพื่อใช้ในการตัดสินใจว่าจะลดระดับเสียงของแอตทริบิวต์ใด ระบบจะเปรียบเทียบรายการ แอตทริบิวต์เสียงที่จะหลบจาก API กับสถานะเสียงปัจจุบัน

  • แอตทริบิวต์เสียงที่ลดระดับเสียงอยู่ในขณะนี้

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

    • อยู่ในรายการ ลดระดับเสียง
    • ไม่อยู่ในรายการ ปิดการหลบเสียง

จากนั้นบริการเสียงในรถจะพิจารณาว่าแอตทริบิวต์เสียงเป็นของอุปกรณ์เอาต์พุตเสียงใด แล้วเพิ่มแอตทริบิวต์เสียงนั้นลงในรายการอุปกรณ์เอาต์พุตเสียงที่ลดระดับเสียง หรือรายการอุปกรณ์เสียงที่ไม่ได้ลดระดับเสียง ตามลำดับ สุดท้ายแล้ว ระบบจะส่งข้อมูลนี้ไปยัง AudioControl HAL เพื่อดำเนินการ ลดระดับเสียงที่จำเป็นในระดับฮาร์ดแวร์

รูปภาพด้านล่างแสดงแผนภาพลำดับแบบย่อของการควบคุมการดัคเสียง สำหรับคำขอโฟกัสเมื่อใช้บริการดัคเสียงของ OEM

ภาพ

ลำดับจะเริ่มต้นเมื่อแอปขอสิทธิ์ จัดการโฟกัสเสียง ผ่าน API ของเครื่องมือจัดการเสียงสาธารณะ ระบบจะส่งต่อคำขอไปยังบริการเสียงในรถยนต์ เพื่อพิจารณาผลลัพธ์ เมื่อกำหนดโฟกัสเสียงแล้ว บริการเสียงในรถจะประเมินการลดระดับเสียง โดยเรียกใช้ OemCarAudioDuckingService เพื่อ ประเมินว่าควรลดระดับเสียงของแอตทริบิวต์เสียงใด เมื่อได้รับผลลัพธ์จาก evaluateAttributesToDuck API แล้ว ระบบจะคำนวณอุปกรณ์เสียงที่จะลดระดับเสียง และสุดท้ายจะส่งข้อมูลไปยัง AudioControl เพื่อใช้การลดระดับเสียง กับฮาร์ดแวร์เสียง

การใช้งานอ้างอิงของบริการเครื่องเสียงในรถยนต์ OEM

AAOS มีการใช้งานอ้างอิงของบริการรถยนต์ OEM ใน packages/services/Car/tests/OemCarServiceTestApp ซึ่งใช้ OemCarService พร้อมด้วย OemCarAudioFocusService OemCarAudioDuckingService และ OemCarAudioVolumeService สำหรับกรณีหลัง แต่ละบริการจะใช้ไฟล์ XML เพื่อโหลดลักษณะการทำงานแบบคงที่ เช่น OemCarAudioFocusServiceImp จะโหลด oem_focus_config.xml ซึ่ง มีเมทริกซ์การโต้ตอบ เมทริกซ์นี้ใช้เพื่อประเมินคำขอโฟกัส เมื่อมีการเรียกใช้ evaluateAudioFocusRequest

การแก้ไขข้อบกพร่องของแอปทดสอบอ้างอิง

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

<!-- This is the component name for the OEM customization service. OEM can choose to implement
this service to customize car service behavior for different policies. If OEMs choose to
implement it, they have to implement a service extending OemCarService exposed by car-lib,
and implement the required component services.
If the component name is invalid, CarService would not connect to any OEM service.
Component name can not be a third party package. It should be pre-installed -->
<string name="config_oemCarService" translatab>le="false"
com.android.car.oemcarservice.testapp</.OemCa>rServiceImpl
/string

วิธียืนยันว่าบริการรถยนต์ของ OEM ใช้คำสั่ง dump ของบริการรถยนต์สำหรับ บริการของ OEM

adb shell dumpsys car_service --oem-service

ผลลัพธ์อาจคล้ายกับเอาต์พุตด้านล่าง

***CarOemProxyService dump***
  mIsFeatureEnabled: true
  mIsOemServiceBound: true
  mIsOemServiceReady: true
  mIsOemServiceConnected: true
  mInitComplete: true
  OEM_CAR_SERVICE_CONNECTED_TIMEOUT_MS: 5000
  OEM_CAR_SERVICE_READY_TIMEOUT_MS: 5000
  mComponentName: com.android.car.oemcarservice.testapp/.OemCarServiceImpl

บูลีนแต่ละรายการในแต่ละกลุ่มของdump info จะกำหนดสถานะของฟีเจอร์ และบริการ เช่น ข้อมูลการทิ้ง mIsOemServiceReady จะระบุว่า บริการพร้อมใช้งานหรือไม่ โดย true จะระบุว่าพร้อมใช้งาน และ false จะระบุว่ายังไม่พร้อมใช้งาน