บริการปลั๊กอิน 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 จะไม่รับสิทธิ์ที่มีให้สำหรับบริการเสียงของรถยนต์โดยอัตโนมัติ ดังนั้น บริการ 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 ของรถยนต์ สถานะปัจจุบันประกอบด้วยผู้ถือโฟกัสปัจจุบันและผู้เสียโฟกัสปัจจุบัน ผู้เสียโฟกัสคือคำขอโฟกัสที่ยังคงเป็นส่วนหนึ่งของสแต็กแต่เสียโฟกัสชั่วคราว
บริการเสียงของรถยนต์ต้องจัดการกิจกรรมเสียงทั้งหมดในรถยนต์ หากบริการเสียงของรถยนต์ไม่ได้จัดการลักษณะการทำงานของเสียงบางส่วน ข้อมูลที่แสดงต่อบริการเสียง OEM ของรถยนต์จะไม่สมบูรณ์ ตัวอย่างเช่น หาก OEM เขียนทับการจัดการโฟกัสเสียงในบริการรถยนต์โดยลงทะเบียนนโยบายโฟกัสเสียงของตนเอง บริการเสียงของรถยนต์จะไม่สามารถให้ข้อมูลที่สมบูรณ์แก่บริการเสียง OEM ของรถยนต์ได้ ซึ่งอาจส่งผลต่อความสามารถของบริการเสียง OEM ของรถยนต์ในการตัดสินใจ เนื่องจากอาจขาดข้อมูลที่บริการเสียงของรถยนต์มองไม่เห็น
บริการเสียงของรถยนต์จะเรียกใช้บริการรถยนต์ของ OEM เพื่อดำเนินการ การเรียกใช้เหล่านี้เกิดขึ้นในกระบวนการต่างๆ ซึ่งต้องมีการสื่อสารระหว่างกระบวนการ (IPC) IPC จะเพิ่มเวลาในการตอบสนองให้กับการเรียกใช้แต่ละครั้ง คุณจึงควรลดเวลาในการตอบสนองในบริการ OEM ให้เหลือน้อยที่สุด
เนื่องจากการเรียกใช้บริการ OEM ของบริการเสียงของรถยนต์เป็นการบล็อก บริการ OEM จึงไม่ควรเรียกใช้บริการเสียงของรถยนต์ในการประเมิน API โดยตรง แต่บริการเสียงของรถยนต์จะให้ข้อมูลที่จำเป็นเพื่อให้การเรียกใช้ระหว่าง 2 กระบวนการเดินทางได้ในทิศทางเดียวเท่านั้น
คำจำกัดความของบริการเสียง OEM ของรถยนต์
บริการโฟกัสเสียง OEM ของรถยนต์
บริการเสียงของรถยนต์จะจัดการคำขอโฟกัสเสียงจากแอปโดยลงทะเบียน Listener โฟกัสของนโยบายเสียง บริการเสียงของรถยนต์มีกลไกในการจัดการลักษณะการทำงานของ โฟกัสตามเมทริกซ์การโต้ตอบแบบคงที่ เมทริกซ์กำหนดการโต้ตอบ 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 มีรายการที่เคยอยู่ในรายการผู้เสียโฟกัสแต่ตอนนี้ถูกรายการใหม่บล็อก การบล็อกอาจเป็นแบบถาวรหรือชั่วคราว สำหรับการบล็อกโฟกัสแบบถาวร ระบบจะนำรายการออกจากสแต็กและส่งการเสียโฟกัสไปยัง Listener โฟกัส สำหรับการเสียโฟกัสแบบชั่วคราว รายการจะยังคงอยู่ในสแต็กผู้เสียโฟกัส แต่ระบบจะเพิ่มตัวบล็อกโฟกัสใหม่ลงในรายการตัวบล็อกของรายการนั้น และจะไม่ส่งการเสียโฟกัสเนื่องจากมีการส่งไปก่อนหน้านี้แล้วเมื่อมีการบล็อกครั้งแรก ระบบจะเลิกบล็อกคำขอในที่สุดเมื่อนำตัวบล็อกปัจจุบันทั้งหมดออก หรือจะนำคำขอออกจากสแต็กหากมีการละทิ้งโฟกัส
API ที่ 2 ชื่อ notifyAudioFocusChange เป็น API แบบทางเดียวซึ่งจะถูกเรียกใช้ในทุกคำขอโฟกัสเสียงหรือการละทิ้งโฟกัสเสียง API นี้ส่วนใหญ่ใช้เพื่อแจ้งให้บริการ OEM ทราบเกี่ยวกับการเปลี่ยนแปลงโฟกัส ซึ่งอาจส่งผลต่อลักษณะการทำงานของบริการเสียง OEM ของรถยนต์
หลักเกณฑ์สำหรับการประเมินโฟกัส
ใน AAOS ระบบจะใช้โฟกัสเสียงเพื่อจัดการการเล่นเสียงและกำหนดว่าแอปใดควรปฏิบัติตามเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีที่สุด ดังนั้น บริการปลั๊กอิน OEM ควรพิจารณาสิ่งต่อไปนี้เมื่อจัดการคำขอโฟกัสเสียง
แอปควรได้รับโฟกัสเสียง ไม่ว่าจะเป็นแบบชั่วคราวหรือถาวร หากไม่มีโฟกัสเสียงที่มีลำดับความสำคัญสูง (เช่น การโทรฉุกเฉินหรือความปลอดภัย)
ขณะที่โฟกัสสื่อทำงานอยู่ แอปที่ขอโฟกัสต่อไปนี้
โฟกัสการใช้งานการโทร ควรได้รับโฟกัสพร้อมกันหรือแบบเฉพาะ
โฟกัสการใช้งานการนำทาง ควรได้รับโฟกัสพร้อมกันหรือแบบเฉพาะ
โฟกัสการใช้งาน Assistant ควรได้รับโฟกัสพร้อมกันหรือแบบเฉพาะ
ขณะที่แอปที่มีโฟกัสเสียงที่มีลำดับความสำคัญสูง (เช่น การโทรฉุกเฉินหรือการแจ้งเตือนด้านความปลอดภัย) ทำงานอยู่ คำขอโฟกัสเสียงที่ล่าช้าขาเข้าควรได้รับอนุมัติหรือล่าช้าตามความจำเป็น
แม้ว่าคำแนะนำข้างต้นจะไม่ครอบคลุมทั้งหมด แต่ก็ช่วยรับประกันได้ว่าแอปที่ขอโฟกัสควรได้รับโฟกัสเมื่อไม่มีเสียงที่มีลำดับความสำคัญสูงที่ทำงานอยู่ แม้ว่าเสียงที่มีลำดับความสำคัญสูงจะทำงานอยู่ ระบบก็ควรพิจารณาคำขอโฟกัสที่ล่าช้าและควรได้รับโฟกัสเมื่อเสียงที่มีลำดับความสำคัญสูงหยุดลง
บริการระดับเสียง OEM ของรถยนต์
บริการเสียงของรถยนต์จะจัดการเหตุการณ์ปุ่มปรับระดับเสียงโดยการฟังการปรับระดับเสียงจากระบบเสียงหรือโดยการฟังเหตุการณ์ปุ่มปรับระดับเสียงจากบริการอินพุตของรถยนต์โดยตรง ในแต่ละกรณี ลักษณะการทำงานเริ่มต้นของบริการเสียงของรถยนต์คือการกำหนดกลุ่มระดับเสียงที่จะเปลี่ยนแปลงตามเครื่องเล่นเสียงที่ทำงานอยู่และรายการลำดับความสำคัญของบริบทเสียง
เรามีรายการลำดับความสำคัญของระดับเสียง 2 รายการ รายการแรกพิจารณาบริบทเสียงทั้งหมดตามลำดับต่อไปนี้ รายการจะแสดงตามลำดับจากมากไปน้อย โดยลำดับความสำคัญสูงสุดจะอยู่ด้านบนและลำดับความสำคัญต่ำสุดจะอยู่ด้านล่าง ตัวอย่างเช่น หากเสียงการนำทางและเสียงเพลงทำงานอยู่พร้อมกัน ระบบจะเปลี่ยนระดับเสียงการนำทางระหว่างเหตุการณ์ปุ่มปรับระดับเสียง
- การนำทาง
- โทร
- เพลง
- ประกาศ
- คำสั่งเสียง
- เสียงเรียกเข้า
- เสียงของระบบ
- ความปลอดภัย
- การปลุก
- การแจ้งเตือน
- สถานะยานพาหนะ
- ฉุกเฉิน
บริการเสียงของรถยนต์มีรายการลำดับความสำคัญที่ 2 ของบริบทเสียง ดังนี้ เพื่อให้การจัดการเหตุการณ์ปุ่มปรับระดับเสียงมีความซับซ้อนน้อยลง
- โทร
- สื่อ
- ประกาศ
- คำสั่งเสียง
รายการนี้จะแสดงตามลำดับจากมากไปน้อยด้วย จุดประสงค์ของรายการที่ 2 นี้คือเพื่อให้สามารถเปลี่ยนเสียงที่พบบ่อยมากขึ้นผ่านเหตุการณ์ปุ่มปรับระดับเสียง ส่วนเสียงที่ไม่พบบ่อยนัก เช่น เสียงที่มีระยะเวลาสั้นกว่า สามารถจัดการได้ผ่าน 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 ของรถยนต์
บริการเสียงของรถยนต์จะจัดการการลดเสียงโดยการตรวจสอบการเปลี่ยนแปลงโฟกัสเสียงและส่งสัญญาณไปยัง HAL ของ AudioControl เกี่ยวกับอุปกรณ์เสียงที่จะลดเสียง
เมื่อโฟกัสเปลี่ยนแปลง ระบบจะประเมินผู้ถือโฟกัสที่ทำงานอยู่ทั้งหมดเพื่อกำหนด
ว่าควรลดเสียงของผู้ถือโฟกัสรายใดตามชุดกฎการลดเสียงแบบคงที่
ต่อไปนี้:
- เสียงแจ้งเหตุฉุกเฉินจะลดเสียงทุกอย่าง ยกเว้นเสียงการโทร
- เสียงแจ้งเตือนด้านความปลอดภัยจะลดเสียงทุกอย่าง ยกเว้นเสียงแจ้งเหตุฉุกเฉิน
- เสียงการนำทางจะลดเสียงทุกอย่าง ยกเว้นเสียงแจ้งเตือนด้านความปลอดภัยและเสียงแจ้งเหตุฉุกเฉิน
- เสียงการโทรจะลดเสียงทุกอย่าง ยกเว้นเสียงแจ้งเตือนด้านความปลอดภัย เสียงแจ้งเหตุฉุกเฉิน และเสียงการนำทาง
- เสียงคำสั่งเสียงจะลดเสียงเรียกเข้า
- เสียงเพลงและเสียงประกาศควรลดเสียงทุกอย่าง
กฎเหล่านี้ไม่ครอบคลุมทั้งหมด และ OEM ยังคงมีหน้าที่รับผิดชอบในการกำหนดวิธีลดเสียงตามหลักเกณฑ์เหล่านี้ OEM สามารถควบคุมคำแนะนำเหล่านี้ได้อย่างมีประสิทธิภาพมากขึ้นตามข้อกำหนดที่มี เราได้เปิดตัว OemCarDuckingService ใน Android 14
class OemCarAudioDuckingService {
List<AudioAttributes> evaluateAttributesToDuck(
OemCarAudioVolumeRequest request);
}
API นี้จะถูกเรียกใช้จากบริการเสียงของรถยนต์เมื่อมีการเปลี่ยนแปลงโฟกัสเสียง โดยจะใช้
OemCarAudioVolumeRequest ที่เปิดตัวใน
บริการระดับเสียง OEM ของรถยนต์ซ้ำ และมีข้อมูลที่เกี่ยวข้อง
เพื่อตัดสินใจว่าจะลดเสียงแอตทริบิวต์ใด ระบบจะเปรียบเทียบรายการแอตทริบิวต์เสียงที่จะลดเสียงจาก API กับสถานะเสียงปัจจุบัน ดังนี้
แอตทริบิวต์เสียงที่ลดเสียงอยู่ในปัจจุบัน
- อยู่ในรายการ จะลดเสียงต่อไป
- ไม่อยู่ในรายการ จะปิดการลดเสียง
แอตทริบิวต์เสียงที่ไม่ได้ลดเสียงอยู่ในปัจจุบัน
- อยู่ในรายการ จะลดเสียง
- ไม่อยู่ในรายการ จะปิดการลดเสียง
จากนั้นบริการเสียงของรถยนต์จะกำหนดอุปกรณ์เอาต์พุตเสียงที่แอตทริบิวต์เสียงเป็นของอุปกรณ์นั้นๆ และเพิ่มอุปกรณ์เหล่านั้นลงในรายการอุปกรณ์เอาต์พุตเสียงที่ลดเสียงหรือรายการอุปกรณ์เสียงที่ไม่ได้ลดเสียงตามลำดับ จากนั้นระบบจะส่งข้อมูลนี้ไปยัง HAL ของ AudioControl เพื่อทำการลดเสียงที่ จำเป็นในระดับฮาร์ดแวร์
รูปภาพด้านล่างแสดงแผนภาพลำดับงานแบบง่ายของการควบคุมการลดเสียงสำหรับคำขอโฟกัสเมื่อใช้บริการลดเสียง OEM
ลำดับงานจะเริ่มต้นเมื่อแอปขอ
จัดการโฟกัสเสียง
ผ่าน API ของตัวจัดการเสียงสาธารณะ ระบบจะส่งต่อคำขอไปยังบริการเสียงของรถยนต์เพื่อกำหนดผลลัพธ์ เมื่อมีการตัดสินใจเกี่ยวกับโฟกัสเสียงแล้ว บริการเสียงของรถยนต์จะประเมินการลดเสียงโดยเรียกใช้ OemCarAudioDuckingService เพื่อประเมินแอตทริบิวต์เสียงที่ควรลดเสียง เมื่อได้รับผลลัพธ์จาก API evaluateAttributesToDuck แล้ว ระบบจะคำนวณอุปกรณ์เสียงที่จะลดเสียง และสุดท้ายจะส่งข้อมูลไปยัง 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 ใช้คำสั่ง 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 แต่ละชุดจะกำหนดสถานะของฟีเจอร์และบริการ ตัวอย่างเช่น ข้อมูล `dump` ชื่อ mIsOemServiceReady จะระบุว่าบริการพร้อมใช้งานหรือไม่ โดย true หมายความว่าพร้อม และ false หมายความว่าไม่พร้อม