บริการปลั๊กอิน 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 รถยนต์ สถานะปัจจุบัน ประกอบด้วยผู้ถือครองโฟกัสปัจจุบันและผู้ที่สูญเสียโฟกัสปัจจุบัน โฟกัสที่เสียไปคือคำขอโฟกัสที่ยังคงเป็นส่วนหนึ่งของสแต็ก แต่สูญเสียโฟกัสชั่วคราว
บริการเสียงในรถยนต์ต้องจัดการกิจกรรมเสียงทั้งหมดในรถยนต์ หากบริการเสียงในรถยนต์ไม่จัดการลักษณะการทำงานของเสียงบางส่วน ข้อมูลที่แสดงต่อบริการเสียงของ 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 ทางเดียวที่จะเรียกใช้ทุกครั้งที่มี
คำขอหรือการละทิ้งโฟกัสเสียง โดยส่วนใหญ่แล้ว API จะใช้เพื่อแจ้งให้ทราบถึงการเปลี่ยนแปลงโฟกัสแก่บริการของ OEM
ซึ่งอาจส่งผลต่อลักษณะการทำงานของบริการเสียงในรถยนต์ของ OEM
หลักเกณฑ์สำหรับการประเมินโฟกัส
ใน AAOS จะใช้โฟกัสเสียงเพื่อจัดการการเล่นเสียงและกำหนดว่าแอปใดควรปฏิบัติตามเพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด ดังนั้น บริการปลั๊กอินของ OEM ควรพิจารณาสิ่งต่อไปนี้เมื่อจัดการคำขอ โฟกัสเสียง
หากไม่มีการโฟกัสเสียงที่มีลำดับความสำคัญสูงอย่างต่อเนื่อง (เช่น การโทร เหตุฉุกเฉิน หรือความปลอดภัย) แอปควรจะสามารถรับโฟกัสเสียงได้ทั้ง ชั่วคราวหรือถาวร
ขณะที่โฟกัสสื่อทำงานอยู่ แอปที่ขอจะทำสิ่งต่อไปนี้
การใช้งานการโทรควรเน้นที่การรับโฟกัสพร้อมกัน หรือแยกกัน
โฟกัสการใช้งานการนำทาง ควรรับโฟกัสได้พร้อมกันหรือแยกกัน
มุ่งเน้นการใช้งาน Assistant ควรรับโฟกัสได้ทั้งแบบ พร้อมกันหรือแบบเฉพาะ
ขณะที่แอปกำลังใช้งานเสียงที่มีลำดับความสำคัญสูง (เช่น การโทร การแจ้งเตือนฉุกเฉิน หรือการแจ้งเตือนด้านความปลอดภัย) คำขอโฟกัสเสียงที่เข้ามาซึ่งล่าช้าควรได้รับอนุญาตหรือล่าช้าตามความจำเป็น
แม้ว่าคำแนะนำข้างต้นจะไม่ครอบคลุมทั้งหมด แต่จะช่วยรับประกันได้ว่า แอปที่ขอโฟกัสควรจะได้รับโฟกัสเมื่อไม่มีเสียงที่มีลำดับความสำคัญสูงที่ใช้งานอยู่ แม้ว่าเสียงที่มีลำดับความสำคัญสูงจะทำงานอยู่ แต่ระบบก็ยังคงต้องปฏิบัติตามคำขอโฟกัสที่ล่าช้า และควรจะได้รับโฟกัสเมื่อเสียงที่มีลำดับความสำคัญสูงหยุดลง
บริการระดับเสียงในรถยนต์ OEM
บริการเสียงในรถยนต์จะจัดการเหตุการณ์ปุ่มปรับระดับเสียงโดยการฟังการปรับระดับเสียงจากระบบเสียง หรือโดยการฟังเหตุการณ์ปุ่มปรับระดับเสียงโดยตรงจากบริการอินพุตของรถยนต์ ในแต่ละกรณี ลักษณะการทำงานเริ่มต้นของบริการเสียงในรถคือการพิจารณากลุ่มระดับเสียงที่จะเปลี่ยนตามเครื่องเล่นเสียงที่ใช้งานอยู่และรายการลำดับความสำคัญของบริบทเสียง
เรามีรายการลำดับความสำคัญของปริมาณ 2 รายการ รายการแรกจะพิจารณาบริบทเสียงทั้งหมดตามลำดับนี้ รายการจะแสดงตามลำดับจากมากไปน้อย โดยมีลำดับความสำคัญสูงสุดอยู่ด้านบนและลำดับความสำคัญต่ำสุดอยู่ด้านล่าง เช่น หาก เสียงการนำทางและเสียงเพลงทำงานพร้อมกัน ระบบจะเปลี่ยนระดับเสียงการนำทางในระหว่างเหตุการณ์ปุ่มปรับระดับเสียง
- การนำทาง
- โทร
- เพลง
- ประกาศ
- คำสั่งเสียง
- เสียงเรียกเข้า
- เสียงของระบบ
- ความปลอดภัย
- การปลุก
- การแจ้งเตือน
- สถานะยานพาหนะ
- ฉุกเฉิน
บริการเสียงในรถยนต์มี รายการลำดับความสำคัญที่ 2 ของบริบทเสียงเพื่อลดความซับซ้อนในการจัดการเหตุการณ์สำคัญของปุ่มปรับระดับเสียง ดังนี้
- โทร
- สื่อ
- ประกาศ
- คำสั่งเสียง
รายการนี้จะแสดงตามลำดับจากมากไปน้อยด้วย จุดประสงค์ของรายการที่ 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 กับสถานะเสียงปัจจุบัน
แอตทริบิวต์เสียงที่ลดระดับเสียงอยู่ในขณะนี้
- ในรายการจะยังคงถูกหลบ
- ไม่อยู่ในรายการ ปิดการหลบเสียง
แอตทริบิวต์เสียงที่ไม่ได้ลดระดับเสียงในขณะนี้
- อยู่ในรายการ ลดระดับเสียง
- ไม่อยู่ในรายการ ปิดการหลบเสียง
จากนั้นบริการเสียงในรถจะพิจารณาว่าแอตทริบิวต์เสียงเป็นของอุปกรณ์เอาต์พุตเสียงใด แล้วเพิ่มแอตทริบิวต์เหล่านั้นลงในรายการอุปกรณ์เอาต์พุตเสียงที่ลดระดับเสียง หรือรายการอุปกรณ์เสียงที่ไม่ได้ลดระดับเสียง ตามลำดับ ในที่สุด ระบบจะส่งข้อมูลนี้ไปยัง HAL ของ AudioControl เพื่อดำเนินการ ลดระดับเสียงที่จำเป็นในระดับฮาร์ดแวร์
รูปภาพด้านล่างแสดงแผนภาพลำดับแบบย่อของการควบคุมการดั๊กกิ้งเสียง สำหรับคำขอโฟกัสเมื่อใช้บริการดั๊กกิ้งของ 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 ใช้คำสั่ง 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
หมายถึงไม่พร้อมใช้งาน