บริการปลั๊กอิน 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 รายการ รายการแรกจะพิจารณาบริบทเสียงทั้งหมดตามลำดับนี้ รายการจะแสดงตามลำดับจากมากไปน้อย โดยมีลำดับความสำคัญสูงสุดอยู่ด้านบนและลำดับความสำคัญต่ำสุดอยู่ด้านล่าง เช่น หาก เสียงการนำทางและเสียงเพลงทำงานพร้อมกัน ระบบจะเปลี่ยนระดับเสียงการนำทางในระหว่างเหตุการณ์ปุ่มปรับระดับเสียง
- การนำทาง
- โทร
- เพลง
- ประกาศ
- คำสั่งเสียง
- เสียงเรียกเข้า
- เสียงของระบบ
- ความปลอดภัย
- สัญญาณเตือน
- การแจ้งเตือน
- สถานะยานพาหนะ
- ฉุกเฉิน
บริการเสียงในรถยนต์มี รายการลำดับความสำคัญที่ 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 กับสถานะเสียงปัจจุบัน
แอตทริบิวต์เสียงที่ลดระดับเสียงอยู่ในขณะนี้
- ในรายการจะยังคงถูกหลบ
- ไม่อยู่ในรายการ ปิดการหลบเสียง
แอตทริบิวต์เสียงที่ไม่ได้ลดระดับเสียงในขณะนี้
- อยู่ในรายการ ลดระดับเสียง
- ไม่อยู่ในรายการ ปิดการหลบเสียง
จากนั้นบริการเสียงในรถจะพิจารณาว่าแอตทริบิวต์เสียงเป็นของอุปกรณ์เอาต์พุตเสียงใด แล้วเพิ่มแอตทริบิวต์เสียงนั้นลงในรายการอุปกรณ์เอาต์พุตเสียงที่ลดระดับเสียง หรือรายการอุปกรณ์เสียงที่ไม่ได้ลดระดับเสียง ตามลำดับ สุดท้ายแล้ว ระบบจะส่งข้อมูลนี้ไปยัง 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>r
ServiceImpl
/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
จะระบุว่ายังไม่พร้อมใช้งาน