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

บริการปลั๊กอิน OEM สำหรับรถยนต์ใหม่ใน Android 14 ช่วยให้กำหนดค่าส่วนประกอบบางอย่างของรถยนต์ได้ สำหรับเสียงโดยเฉพาะ มีการแนะนำบริการปลั๊กอินใหม่สามบริการ ซึ่งช่วยให้ 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 ของรถยนต์ บริการเครื่องเสียงรถยนต์กำหนด hooks ต่างๆ ที่สามารถเรียกใช้บริการเครื่องเสียง OEM ของรถยนต์เพื่อจัดการลักษณะการทำงานของเสียง อย่างหลังจะเกิดขึ้นเมื่อมีการกำหนดส่วนประกอบบริการเครื่องเสียงรถยนต์ OEM ที่เกี่ยวข้องเท่านั้น มิฉะนั้น บริการเครื่องเสียงรถยนต์จะใช้ลักษณะการทำงานเริ่มต้น

ภาพ

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

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

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

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

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

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

บริการเครื่องเสียงรถยนต์จัดการคำขอโฟกัสเสียงจากแอพโดยการลงทะเบียนผู้ฟังนโยบายเสียง บริการเครื่องเสียงรถยนต์มีกลไกในการจัดการพฤติกรรมการโฟกัสโดยยึดตาม Interaction matrix แบบคงที่ เมทริกซ์กำหนดการโต้ตอบที่แตกต่างกันสามประเภท:

  • ปฏิสัมพันธ์ที่เกิดขึ้นพร้อมกัน ที่จับโฟกัสสามารถรักษาโฟกัสไปพร้อมๆ กันได้

  • ปฏิสัมพันธ์พิเศษ คำขอโฟกัสที่เข้ามาจะโฟกัสจากที่ยึดโฟกัสปัจจุบัน

  • ปฏิเสธการโต้ตอบ คำร้องขอโฟกัสขาเข้าถูกปฏิเสธโดยยึดตามตัวยึดโฟกัสปัจจุบัน

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

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

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

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

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

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

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

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

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

แนวทางการประเมินโฟกัส

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

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

  • ในขณะที่มีเดียโฟกัสทำงานอยู่ แอพที่ร้องขอ:

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

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

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

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

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

บริการปริมาณรถยนต์ OEM

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

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

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

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

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

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

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

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

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

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

กฎเหล่านี้ไม่ได้ครอบคลุมทั้งหมด และ 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" translatable="false">
com.android.car.oemcarservice.testapp/.OemCarServiceImpl
</string>

หากต้องการตรวจสอบบริการรถยนต์ OEM ให้ใช้คำสั่ง car service 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 แต่ละชุดจะกำหนดสถานะของฟีเจอร์และบริการ ตัวอย่างเช่น ข้อมูลดัมพ์ mIsOemServiceReady ระบุว่าบริการพร้อมใช้งานหรือไม่ โดยที่ true ระบุว่าพร้อม และ false ระบุว่ายังไม่พร้อม