บริการปลั๊กอิน 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 loser คือคำขอโฟกัสที่ยังคงอยู่ในกองแต่เสียโฟกัสชั่วคราว
บริการเสียงรถยนต์ต้องจัดการกิจกรรมเสียงทั้งหมดในรถ หากบริการเสียงของรถไม่ได้จัดการลักษณะการทํางานของเสียงบางส่วน ข้อมูลที่แสดงต่อบริการเสียง 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
มีรายการที่ก่อนหน้านี้มีโฟกัสอยู่ แต่ตอนนี้ควรสูญเสียโฟกัสอย่างถาวรหรือชั่วคราว ระบบจะนำแอปที่เสียโฟกัสถาวรออกจากกองโฟกัสเสียง และย้ายแอปที่เสียโฟกัสชั่วคราวไปยังกองโฟกัสที่เสียโฟกัสปัจจุบันจนกว่าแอปเหล่านั้นจะได้รับโฟกัสอีกครั้งหรือผู้ขอโฟกัสเดิมเลิกใช้งาน อย่างไรก็ตาม ผู้ฟังโฟกัสสำหรับคำขอจะได้รับการสูญเสียโฟกัสที่เกี่ยวข้อง
รายการ newlyBlocked
มีรายการที่เคยอยู่ในรายการผู้แพ้ตามโฟกัส แต่ตอนนี้ถูกบล็อกโดยรายการใหม่ การบล็อกอาจเป็นแบบถาวรหรือชั่วคราวก็ได้ สําหรับโฟกัสที่ถูกบล็อกอย่างถาวร ระบบจะนำรายการออกจากกองและส่งการสูญเสียโฟกัสไปยังผู้ฟังโฟกัส สําหรับการสูญเสียโฟกัสชั่วคราว รายการจะยังคงอยู่ในกองการสูญเสียโฟกัส แต่ระบบจะเพิ่มตัวบล็อกโฟกัสใหม่ลงในรายการตัวบล็อก แต่จะไม่มีการส่งการสูญเสียโฟกัสเนื่องจากมีการส่งไปแล้วเมื่อมีการบล็อกครั้งแรก สุดท้ายแล้ว คำขอจะเลิกถูกบล็อกเมื่อนำตัวบล็อกปัจจุบันทั้งหมดออก หรือระบบจะนำคำขอออกจากกองหากโฟกัสถูกยกเลิก
API รายการที่ 2 คือ notifyAudioFocusChange
เป็น API แบบ 1 ทิศทางที่เรียกใช้ทุกครั้งที่มีคำขอหรือยกเลิกโฟกัสเสียง 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 เกี่ยวกับอุปกรณ์เสียงที่จะลดระดับ
เมื่อโฟกัสเปลี่ยนไป ระบบจะประเมินโฮลเดอร์โฟกัสที่ใช้งานอยู่ทั้งหมดเพื่อพิจารณาว่าควรซ่อนรายการใดตามกฎการซ่อนแบบคงที่ชุดนี้
- เสียงแจ้งเหตุฉุกเฉินจะปิดเสียงทุกอย่างยกเว้นเสียงเรียกเข้า
- ฟีเจอร์ความปลอดภัยจะปิดเสียงทั้งหมดยกเว้นเสียงฉุกเฉิน
- การนำทางจะปิดเสียงทั้งหมด ยกเว้นเสียงเพื่อความปลอดภัยและเสียงฉุกเฉิน
- ปิดเสียงทั้งหมดยกเว้นเสียงเกี่ยวกับความปลอดภัย เสียงฉุกเฉิน และเสียงการนำทาง
- เสียงเรียกเข้าแบบเป็ด
- เสียงเพลงและประกาศควรถูกปิดเสียงโดยทุกอย่าง
กฎเหล่านี้ไม่ใช่กฎทั้งหมด และ 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 ใช้คำสั่ง 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
Bool แต่ละรายการในข้อมูล dump
แต่ละชุดจะกำหนดสถานะของฟีเจอร์และบริการ ตัวอย่างเช่น ข้อมูลการดัมพ์ mIsOemServiceReady
จะระบุว่าบริการพร้อมใช้งานหรือไม่ โดยที่ true
หมายถึงพร้อมใช้งาน และ false
หมายถึงไม่พร้อมใช้งาน