ก่อนเริ่มสตรีมเชิงตรรกะ แอปจะขอโฟกัสเสียงโดยใช้แอตทริบิวต์เสียงเดียวกับที่ใช้สำหรับสตรีมเชิงตรรกะ แอปต้องคำนึงถึงการสูญเสียโฟกัสเพื่อให้ทำงานได้ตามที่คาดไว้ใน Use Case ยานยนต์
แม้ว่าระบบจะแนะนำให้ส่งคำขอโฟกัส แต่ก็ไม่ได้บังคับ ดังนั้น ให้พิจารณาโฟกัสเป็นวิธีควบคุมและหลีกเลี่ยงความขัดแย้งโดยอ้อมระหว่างการเล่นแทนที่จะใช้เป็นกลไกการควบคุมเสียงหลัก ยานพาหนะไม่ควรใช้ระบบโฟกัสเพื่อดำเนินการกับระบบย่อยเสียง
การโต้ตอบกับโฟกัส
ระบบจะจัดการคําขอโฟกัสเสียงตามการโต้ตอบที่กําหนดไว้ล่วงหน้าระหว่าง CarAudioContext
ของคําขอกับ CarAudioContext
ของผู้ถือโฟกัสปัจจุบันเพื่อรองรับ AAOS การโต้ตอบมี 3 ประเภท ได้แก่
- พิเศษ
- ปฏิเสธ
- เกิดขึ้นพร้อมกัน
การโต้ตอบแบบพิเศษ
รูปแบบการโต้ตอบนี้เป็นรูปแบบที่ใช้กับ Android มากที่สุด
ในการโต้ตอบเฉพาะ ระบบจะอนุญาตให้มีเพียงแอปเดียวที่โฟกัสได้ในแต่ละครั้ง
ดังนั้น คำขอโฟกัสขาเข้าจะได้รับโฟกัส ขณะที่โฟกัสของโฟกัสโฮลเดอร์ที่มีอยู่จะหายไป เนื่องจากทั้ง 2 แอปเล่นสื่อ อนุญาตให้มีเพียงแอปเดียวที่โฟกัสได้ ด้วยเหตุนี้ คำขอโฟกัสของแอปที่เพิ่งเริ่มต้นจึงแสดงผลพร้อมAUDIOFOCUS_REQUEST_GRANTED
ขณะที่แอปเพลงที่เล่นอยู่ในปัจจุบันจะได้รับเหตุการณ์การเปลี่ยนแปลงโฟกัสที่มีสถานะ "สูญเสีย" ซึ่งสอดคล้องกับประเภทคำขอที่ส่ง
ปฏิเสธการโต้ตอบ
เมื่อมีการโต้ตอบแบบปฏิเสธ ระบบจะปฏิเสธคําขอขาเข้าเสมอ เช่น เมื่อพยายามเล่นเพลงขณะที่โทรอยู่ ในกรณีนี้ หาก Dialer คงโฟกัสเสียงไว้สำหรับการโทร และแอปที่ 2 ขอโฟกัสเพื่อเล่นเพลง แอปเพลงจะได้รับ AUDIOFOCUS_REQUEST_FAILED
เพื่อตอบสนองต่อคำขอ เนื่องจากคำขอโฟกัสถูกปฏิเสธ ระบบจะไม่ส่งการสูญเสียโฟกัสไปยังผู้ถือโฟกัสปัจจุบัน
การโต้ตอบพร้อมกัน
เฉพาะ AAOS เท่านั้นที่มีการโต้ตอบพร้อมกัน ซึ่งจะช่วยให้แอปที่ขอโฟกัสเสียงในรถสามารถโฟกัสได้พร้อมกันกับแอปอื่นๆ เงื่อนไขต่อไปนี้ต้องได้รับการปฏิบัติตามเพื่อให้เกิดการโต้ตอบพร้อมกัน ข้อมูลต่อไปนี้
คำขอโฟกัสขาเข้าต้องขอAudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
ตัวยึดโฟกัสปัจจุบันไม่ได้setPauseWhenDucked(true)
ผู้ถือโฟกัสปัจจุบันเลือกไม่รับเหตุการณ์การลดเสียง
หากเป็นไปตามเกณฑ์เหล่านี้ คำขอโฟกัสจะแสดงผลพร้อม AUDIOFOCUS_REQUEST_GRANTED
ขณะที่โฟกัสของผู้ถือโฟกัสปัจจุบันจะไม่มีการเปลี่ยนแปลง อย่างไรก็ตาม หากโฟกัสที่ใช้งานอยู่เลือกรับเหตุการณ์การซ่อนหรือหยุดชั่วคราวเมื่อมีการซ่อน โฟกัสที่ใช้งานอยู่จะเสียโฟกัส เช่นเดียวกับที่จะเกิดขึ้นเมื่อมีการโต้ตอบแบบผูกขาด
จัดการสตรีมหลายรายการพร้อมกัน
แม้ว่าการโต้ตอบพร้อมกันจะมีการใช้งานหลายอย่าง แต่โปรดระมัดระวังในการผสมและลดระดับเสียงที่ระดับฮาร์ดแวร์ในอุปกรณ์เอาต์พุตต่างๆ เราขอแนะนําอย่างยิ่งว่าควรกําหนดเส้นทางอินสแตนซ์ของ CarAudioContext
ที่อนุญาตให้เล่นพร้อมกันไปยังอุปกรณ์เอาต์พุตที่แตกต่างกัน
การมีอุปกรณ์เอาต์พุตแยกต่างหากสำหรับสตรีมพร้อมกันจะช่วยให้ HAL สามารถลดระดับเสียงสตรีมใดสตรีมหนึ่งก่อนที่จะผสม หรือส่งสตรีมไปยังลำโพงต่างๆ ในยานพาหนะ หากสตรีมเชิงตรรกะผสมกันภายใน Android ระบบจะไม่เปลี่ยนแปลงอัตราขยายและส่งเป็นส่วนหนึ่งของสตรีมจริงเดียวกัน
เช่น เมื่อนำทางและสื่อไปพร้อมกัน ระบบอาจลดระดับการขยายเสียงสตรีมสื่อชั่วคราว (หรือลดเสียง) เพื่อให้ได้ยินวิธีการไปยังส่วนต่างๆ อย่างชัดเจนยิ่งขึ้น หรือจะส่งสตรีมการนำทางไปยังลำโพงฝั่งคนขับขณะที่สื่อเล่นต่อไปในห้องโดยสารส่วนที่เหลือก็ได้
เมทริกซ์การโต้ตอบ
ตารางนี้แสดงเมทริกซ์การโต้ตอบตามที่ CarAudioService
กำหนด
แต่ละแถวแสดง CarAudioContext
ของผู้ถือโฟกัสปัจจุบัน และแต่ละคอลัมน์แสดง CarAudioContext
ของคําขอขาเข้า
ตัวอย่างเช่น เมื่อแอปสื่อเพลงมีโฟกัสอยู่ขณะที่แอปนำทางขอโฟกัส ตารางเมทริกซ์จะระบุว่าการโต้ตอบ 2 รายการสามารถเล่นพร้อมกันได้ โดยสมมติว่าเป็นไปตามเกณฑ์อื่นๆ สำหรับการโต้ตอบพร้อมกัน
เนื่องจากการโต้ตอบเกิดขึ้นพร้อมกัน จึงอาจมีผู้ถือโฟกัสได้มากกว่า 1 ราย ในกรณีนี้ ระบบจะเปรียบเทียบคําขอโฟกัสขาเข้ากับโฟกัสที่ถือครองอยู่ในปัจจุบันแต่ละรายการก่อนตัดสินใจว่าจะใช้การโต้ตอบใด ในกรณีนี้ การโต้ตอบที่เข้มงวดที่สุดจะเป็นผู้ชนะ ปฏิเสธ จากนั้นเป็นเอกสิทธิ์ และสุดท้ายเป็นการทำงานพร้อมกัน
รูปที่ 1 เมทริกซ์การโต้ตอบของโฟกัสเสียง
การนําทางระหว่างการโทร
ใน Android 11 มีการเปิดตัวการตั้งค่าผู้ใช้ใหม่เพื่อให้ผู้ใช้เปลี่ยนแปลงลักษณะการโต้ตอบระหว่างการนําทางกับการโทรได้ เมื่อตั้งค่าแล้ว
android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL
จะเปลี่ยนการโต้ตอบระหว่างคำขอโฟกัส NAVIGATION
ที่เข้ามาและผู้ถือโฟกัส CALL
ในปัจจุบันจากพร้อมกันเป็นปฏิเสธ หากผู้ใช้ไม่ต้องการให้คำแนะนำการนำทางขัดจังหวะการโทร ผู้ใช้จะเปิดใช้การตั้งค่านี้ได้ การตั้งค่านี้จะคงอยู่สำหรับผู้ใช้และสามารถตั้งค่าแบบไดนามิกเพื่อให้คำขอโฟกัสที่ตามมาใช้การตั้งค่าใหม่
โฟกัสเสียงที่เลื่อนเวลาได้
ใน Android 11 AAOS ได้เพิ่มการรองรับการขอโฟกัสเสียงที่เลื่อนเวลาได้ ซึ่งจะช่วยให้คำขอโฟกัสแบบถาวรล่าช้าได้เมื่อการโต้ตอบกับโฟกัสที่ถือครองอยู่ในปัจจุบันมักจะส่งผลให้คำขอถูกปฏิเสธ เมื่อการเปลี่ยนแปลงโฟกัสส่งผลให้คำขอที่เลื่อนเวลาไว้ได้รับโฟกัส คำขอดังกล่าวจะได้รับอนุมัติ
กฎสำหรับคำขอโฟกัสเสียงที่ล่าช้า
คำขอถาวรเท่านั้น คุณส่งคำขอที่เลื่อนเวลาไว้ได้สำหรับแหล่งที่มาที่ไม่ใช่เสียงชั่วคราวเท่านั้น เพื่อหลีกเลี่ยงไม่ให้เสียงชั่วคราวเล่นนานหลังจากที่มีความเกี่ยวข้อง
คุณเลื่อนเวลาคำขอได้ครั้งละ 1 รายการเท่านั้น หากมีคำขอที่เลื่อนเวลาได้เกิดขึ้นขณะที่มีคำขอที่เลื่อนเวลาอยู่แล้ว คำขอที่เลื่อนเวลาไว้ก่อนหน้านี้จะได้รับเหตุการณ์การเปลี่ยนแปลง
AUDIOFOCUS_LOSS
และคำขอใหม่จะได้รับการตอบกลับแบบซิงค์ของAUDIOFOCUS_REQUEST_DELAYED
คำขอที่เลื่อนเวลาได้ต้องมี
OnAudioFocusChangeListener
หลังจากคำขอถูกเลื่อนออกไป จะใช้ Listener เพื่อแจ้งให้ผู้ขอทราบเมื่อคำขอได้รับอนุมัติในที่สุด (AUDIOFOCUS_GAIN
) หรือหากถูกปฏิเสธในภายหลัง (AUDIOFOCUS_LOSS
)
ขอโฟกัสที่เลื่อนเวลาได้
วิธีสร้างคำขอที่เลื่อนเวลาได้
ใช้
AudioFocusRequest.Builder#setAcceptsDelayedFocusGain
mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener(); mDelayedFocusRequest = new AudioFocusRequest .Builder(AudioManager.AUDIOFOCUS_GAIN) .setAudioAttributes(mMusicAudioAttrib) .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener) .setForceDucking(false) .setWillPauseWhenDucked(false) .setAcceptsDelayedFocusGain(true) .build();
เมื่อส่งคำขอ ให้จัดการกับ
AUDIOFOCUS_REQUEST_DELAYED
การตอบกลับดังนี้int delayedFocusRequestResults = mAudioManager.requestAudioFocus(mDelayedFocusRequest); if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { // start audio playback return; } if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) { // audio playback delayed to audio focus listener return; }
เมื่อคําขอล่าช้า โปรแกรมฟังโฟกัสจะจัดการการเปลี่ยนแปลงโฟกัสดังนี้
private final class MediaWithDelayedFocusListener implements OnAudioFocusChangeListener { @Override public void onAudioFocusChange(int focusChange) { synchronized (mLock) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: … // Start focus playback case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: … // Pause media transiently case AudioManager.AUDIOFOCUS_LOSS: … // Stop media
การเลือนที่ระบบบังคับ
Android 15 เปิดตัวฟีเจอร์เสียงค่อยๆ เบาลงที่ระบบบังคับใช้ใน AAOS ใน Android ระบบจะไม่บังคับใช้โหมดโฟกัสเสียง ดังนั้น แม้ว่าเราจะแนะนำให้นักพัฒนาแอปปฏิบัติตามหลักเกณฑ์โฟกัสเสียง แต่หากแอปเล่นเสียงดังต่อไปแม้ว่าจะสูญเสียโฟกัสเสียงแล้ว ระบบก็ไม่สามารถป้องกันได้
ในสภาพแวดล้อมยานยนต์ที่มีความสำคัญต่อความปลอดภัย การยึดมั่นกับโฟกัสเสียงเป็นสิ่งสําคัญเพื่อลดสิ่งรบกวนผู้ขับขี่ ฟีเจอร์นี้จะช่วยให้เฟรมเวิร์กเสียงค่อยๆ ลดระดับเสียงของแอปที่สูญเสียโฟกัสเสียงโดยอัตโนมัติ เพื่อให้คุณควบคุมและคาดการณ์ประสบการณ์เสียงได้มากขึ้น
การปรับปรุงนี้ช่วยให้มั่นใจได้ว่าแอปจะยึดตามการตัดสินใจเกี่ยวกับการสูญเสียโฟกัสเสียงตามที่ระบุไว้ในตารางการโต้ตอบ ซึ่งจะช่วยป้องกันไม่ให้การเล่นเสียงขัดแย้งกัน
การออกแบบระดับสูง
รูปภาพต่อไปนี้แสดงการออกแบบระดับสูงและการรองรับฟีเจอร์การสูญเสียโฟกัสในรถยนต์
รูปที่ 2 การออกแบบระดับสูงสำหรับฟีเจอร์การเลือนที่ระบบบังคับใช้
- การลดระดับเสียงแบบกำหนดเป้าหมาย: การบังคับใช้การลดระดับเสียงของระบบใน Android 15 ได้รับการออกแบบมาโดยเฉพาะสำหรับกรณีที่แอปเสียโฟกัสเสียงแต่ยังคงเล่นเสียงต่อไป
- กลไกการค่อยๆ ปิดเสียง: เมื่อแอปเสียโฟกัสเสียงไปให้กับแอปใหม่ที่ขอใช้เสียง ระบบจะดำเนินการดังนี้
- เฟรมเวิร์กเสียงจะค่อยๆ ลดระดับเสียงของแอปที่สูญเสียไปโดยอัตโนมัติ
- หลังจากเสียงค่อยๆ เบาลง ระบบจะปิดเสียงสตรีมเสียง
- จากนั้นแอปจะได้รับการแจ้งเตือนการสูญเสียโฟกัสเสียง
- ระบบจะปิดเสียงแอปที่ทำงานผิดปกติจนกว่าแอปจะกลับมามีโฟกัสเสียงอีกครั้ง
- ตรรกะเริ่มต้นคือค่อยๆ แสดงแอปที่ค่อยๆ หายไปหลังจากผ่านไป 2 วินาที อย่างไรก็ตาม OEM สามารถกำหนดค่านี้ให้เป็นค่าหมดเวลาใดก็ได้
- เฟรมเวิร์กเสียงใช้การกำหนดค่า OEM สำหรับทั้งการดำเนินการค่อยๆ เบาลงและค่อยๆ ดังขึ้น
ไฟล์กําหนดค่า OEM: Android 15 มีไฟล์กําหนดค่าใหม่ ดังนี้
car_audio_fade_configuration.xml
- ไฟล์นี้ช่วยให้ OEM กำหนดเกณฑ์สำหรับกรณีที่ระบบจะบังคับใช้โฟกัสเสียงกับแอปที่เสียสิทธิ์
- เฟรมเวิร์กเสียงจะบังคับใช้การค่อยๆ ปิดเสียงและการปิดเสียงเฉพาะในกรณีที่แอปที่แพ้ตรงกับกฎที่ OEM กำหนดไว้ในไฟล์ XML นี้เท่านั้น
- ซึ่งจะเป็นกลไกให้ OEM ปรับแต่งลักษณะการทำงานของฟีเจอร์ตามลักษณะของแอปหรือประเภทการใช้งานเสียง
การควบคุมฟีเจอร์ด้วย RRO: เราได้เปิดตัว Flag ใหม่สำหรับฟีเจอร์การวางซ้อนทรัพยากรรันไทม์ (RRO)
audioUseFadeManagerConfiguration
เพื่อเปิดหรือปิดใช้ฟีเจอร์นี้- ฟีเจอร์นี้ปิดใช้อยู่โดยค่าเริ่มต้น
- หากต้องการเปิดใช้งานการสูญเสียโฟกัสเสียงที่ระบบบังคับใช้ OEM จะต้องตั้งค่า Flag นี้เป็น
true
- แม้ว่าเฟรมเวิร์กระบบเสียงรถยนต์จะคาดหวังให้คำจำกัดความการกําหนดค่าการเลี้ยวเสียงถูกต้องเมื่อเปิดใช้ Flag แต่การไม่มีคำจำกัดความดังกล่าวจะไม่ทําให้เกิดข้อยกเว้นร้ายแรงโดยอัตโนมัติ
- แอปทั้งหมดของการกำหนดค่าการเลือนต้องมีคําจํากัดความการเลือนที่ตรงกัน การเรียกใช้การกำหนดค่าการเลี้ยวเสียง (ตามชื่อ) เป็นส่วนหนึ่งของการกำหนดค่าระบบเสียงรถยนต์โดยไม่ระบุคำจำกัดความที่ถูกต้องเป็นข้อผิดพลาดร้ายแรง
- เมื่อปิดใช้ Flag ระบบจะไม่สนใจการกําหนดค่าการเฟดทั้งหมดและการอ้างอิงการกําหนดค่า
การกําหนดค่าเครื่องมือจัดการการเลือน
เฟรมเวิร์กเสียงของ Android 15 เปิดตัว FadeManagerConfiguration
แบบรวมเพื่อให้ OEM ควบคุมลักษณะการเลือนเสียงได้อย่างละเอียด กรอบการทำงานนี้แสดงอยู่ในรูปที่ 3
รูปที่ 3 การกําหนดค่าเครื่องมือจัดการการเลือน
การกําหนดค่านี้ประกอบด้วย
- คุณสมบัติการเปลี่ยนแบบจางลง: การตั้งค่าทั้งการจางออกและการจางเข้า
- กําหนดได้ด้วยการใช้เสียงหรือแอตทริบิวต์เสียงที่เฉพาะเจาะจง
- อนุญาตให้ตั้งค่าระยะเวลาเอง
- การตั้งค่าเหล่านี้ใช้ในการสร้าง
VolumeShaper.Configuration
- นโยบายการลดระดับ: กฎที่ควบคุมเวลาที่จะลดระดับ
- ปุ่มเปิด/ปิดส่วนกลางเพื่อเปิดหรือปิดใช้การเลือนเสียง
- รายการการใช้งานเสียงที่ปรับระดับเสียงให้เบาลงได้ (มีสิทธิ์เบาลงเมื่อเสียโฟกัส)
- รายการการยกเว้น (ไม่สามารถทำให้เบาลงได้) ป้องกันไม่ให้แหล่งที่มาของเสียงที่สำคัญหรือที่กําหนดไว้เบาลง รายการเหล่านี้อาจอิงตามข้อมูลต่อไปนี้
- ประเภทเนื้อหา
- แอตทริบิวต์เสียง
- UID ของแอป (ตั้งค่าได้ในระหว่างรันไทม์เท่านั้น)
การกำหนดค่า OEM
ในส่วนนี้ เราจะดูการปรับแต่ง OEM ที่มีให้
ไฟล์ XML การกำหนดค่าการเลี้ยวเสียงของรถ
Android 15 เปิดตัวไฟล์การกําหนดค่าใหม่ car_audio_fade_configuration.xml
ซึ่งช่วยให้ OEM ปรับแต่งลักษณะการค่อยๆ ปิดเสียงได้อย่างเต็มที่เมื่อสูญเสียโฟกัส
- ไฟล์ XML นี้ช่วยให้คุณกำหนดการกำหนดค่าการเฟดที่แตกต่างกันได้หลายรายการ โดยแต่ละรายการต้องมีชื่อที่ไม่ซ้ำกันสำหรับการอ้างอิงข้ามภายใน
car_audio_configuration.xml
- การกำหนดค่าเหล่านี้ใช้ได้กับโซนเสียงและการกำหนดค่าโซนต่างๆ อย่างยืดหยุ่น
- โปรดทราบว่าการกําหนดค่าการเลือนแต่ละรายการยอมรับเฉพาะค่าระยะเวลาเป็นมิลลิวินาทีเท่านั้น ซึ่งระบบจะใช้เพื่อสร้าง
VolumeShaper.Configuration
ที่เกี่ยวข้องภายใน
ดูคําแนะนําการใช้งานจริงได้จากการกำหนดค่าตัวอย่างที่ระบุไว้สําหรับโปรแกรมจําลองที่device/generic/car/emulator/audio/car_audio_fade_configuration.xml
ไฟล์ XML การกำหนดค่าระบบเสียงของรถยนต์
Android 15 เปิดตัวไฟล์ car_audio_configuration.xml
ที่อัปเดตแล้ว ซึ่งตอนนี้เป็นเวอร์ชัน 4 ซึ่งรวมแท็ก applyFadeConfigs
และ fadeConfig
ใหม่
แท็ก applyFadeConfigs
อาจมีคำจำกัดความ fadeConfig
หลายรายการ ซึ่งช่วยให้การกำหนดค่าการเลือนมีความยืดหยุ่น คำจำกัดความแต่ละรายการ
- ต้องระบุ
fadeConfig
เริ่มต้น 1 รายการที่ระบุด้วยisDefault = true
- อาจมีคำจำกัดความ
fadeConfig
ชั่วคราวหลายรายการ การกําหนดค่าชั่วคราวเหล่านี้จะมีผลเฉพาะในระหว่างการโต้ตอบที่สูญเสียโฟกัสเสียง และเฉพาะในกรณีที่แอปที่ได้รับโฟกัสเสียงตรงกับเกณฑ์ที่กําหนดไว้ภายในการกําหนดค่าชั่วคราวเท่านั้น
ดูคําแนะนําการใช้งานจริงได้จากการกำหนดค่าตัวอย่างที่ระบุไว้สําหรับโปรแกรมจําลองที่device/generic/car/emulator/audio/car_audio_configuration.xml
ส่วนขยายบริการโฟกัสเสียงของ OEM
OEM ที่ใช้บริการโฟกัสเสียงรถยนต์ที่กำหนดเองมีความยืดหยุ่นในการกำหนดการตั้งค่าเสียงค่อยๆ เบาลงโดยรวมไว้ใน OemCarAudioFocusResult
ซึ่งทำได้โดยใช้วิธีการสร้างดังนี้setAudioAttributesToCarAudioFadeConfigurationMap()
/** @see OemCarAudioFocusResult#getAudioAttributesToCarAudioFadeConfigurationMap() **/
@NonNull
public Builder setAudioAttributesToCarAudioFadeConfigurationMap(@NonNull
Map<AudioAttributes, CarAudioFadeConfiguration> attrsToCarAudioFadeConfig) {
}
สิ่งที่น่าสังเกตคือ OEM สามารถเลือกได้ว่าจะใช้การตั้งค่าการเลือนออกเมื่อเข้าสู่ระบบที่กําหนดค่าไว้ล่วงหน้า หรือจะใช้การกําหนดค่าแบบไดนามิกผ่านบริการโฟกัสเสียงที่กําหนดเอง ซึ่งให้การควบคุมที่ปรับเปลี่ยนได้
แผนภาพลำดับ
แผนภาพลำดับเหตุการณ์นี้แสดงลักษณะการทำงานหลังจากให้โฟกัสเสียงแก่ App2
และ App1
เสียโฟกัสเสียงในภายหลัง
- เมื่อบริการเสียงของรถยนต์ส่งการสูญเสียโฟกัสเสียงไปยัง
App1
การเล่นจากโปรแกรมเล่นApp1
จะค่อยๆ เบาลงตามที่กำหนดโดยFadeManagerConfiguration
ที่ใช้งานอยู่ เมื่อการดำเนินการค่อยๆ ปิดเสียงเสร็จสิ้นแล้วApp1
จะได้รับการเรียกกลับมาตรฐานเมื่อสูญเสียโฟกัสเสียง - คุณเลือกให้เสียงของ
App1
ค่อยๆ ดังขึ้นอีกครั้งหลังจากผ่านไปตามระยะเวลาที่กำหนดได้ OEM มีความยืดหยุ่นในการกำหนดระยะเวลานี้ผ่านBuilder#setFadeInDurationForUsage(int, long)
ตามข้อกำหนดเฉพาะของผลิตภัณฑ์
รูปที่ 4 แผนภาพลำดับขั้นของฟีเจอร์เสียงรถยนต์ค่อยๆ เบาลง
การจัดการโฟกัสแบบหลายโซน
สำหรับยานพาหนะที่มีหลายโซนเสียง ระบบจะจัดการโฟกัสเสียงสำหรับแต่ละโซนแยกกัน ดังนั้น คำขอไปยังโซนหนึ่งจะไม่คำนึงถึงสิ่งที่โฟกัสอยู่ในโซนอื่น และไม่ทำให้โฟกัสในโซนอื่นเสียโฟกัส ฟีเจอร์นี้ช่วยให้คุณจัดการโฟกัสของห้องโดยสารหลักแยกจากระบบความบันเทิงสำหรับเบาะหลังได้ จึงจะไม่รบกวนการเล่นเสียงในโซนหนึ่งด้วยการเปลี่ยนแปลงโฟกัสไปยังอีกโซนหนึ่ง
สำหรับแอปทั้งหมด CarAudioService
จะจัดการโฟกัสโดยอัตโนมัติ โซนเสียงของคำขอโฟกัสจะกำหนดโดย UserId
หรือ UID
ที่เชื่อมโยง (ดูรายละเอียดที่การกำหนดเส้นทางเสียงแบบหลายโซน)
ขอเสียงจากหลายโซนพร้อมกัน
หากแอปต้องการเล่นเสียงในหลายโซนพร้อมกัน แอปจะต้องขอโฟกัสสำหรับแต่ละโซนโดยใส่ AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
ไว้ในแพ็กเกจ
//Create attribute with bundle and AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
Bundle bundle = new Bundle();
bundle.putInt(CarAudioManager.AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID,
zoneId);
AudioAttributes attributesWithZone = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.addBundle(bundle)
.build();
//Create focus request using built attributesWithZone
พารามิเตอร์กลุ่มนี้ช่วยให้ผู้ขอลบล้างการแมปโซนเสียงอัตโนมัติเพื่อใช้รหัสโซนที่ระบุแทน ดังนั้น แอปจึงส่งคำขอแยกต่างหากสำหรับโซนเสียงแต่ละโซนได้
โฟกัสเสียง HAL
ตั้งแต่ Android 11 เป็นต้นไป ระบบจะเปิดใช้ HAL เพื่อขอโฟกัสในนามของสตรีมภายนอก แม้ว่าจะเป็นทางเลือก แต่เราขอแนะนำให้ใช้ API เหล่านี้เพื่อให้เสียงภายนอกมีส่วนร่วมในระบบนิเวศ Android ได้อย่างมีประสิทธิภาพสูงสุดและมอบประสบการณ์การใช้งานที่ราบรื่นแก่ผู้ใช้
HAL จะเป็นผู้ตัดสินใจขั้นสุดท้ายว่าเสียงใดควรมีความสำคัญมากกว่า ด้วยเหตุนี้ ระบบจึงควรเล่นเสียงฉุกเฉินและเสียงที่สำคัญต่อความปลอดภัย ไม่ว่า HAL จะได้รับโฟกัสเสียงหรือไม่ก็ตาม และควรเล่นเสียงต่อไปตามความเหมาะสมแม้ว่า HAL จะเสียโฟกัสเสียงก็ตาม เช่นเดียวกับเสียงที่กําหนดโดยกฎระเบียบของรัฐบาล
HAL ควรปิดเสียงสตรีม Android อย่างสม่ำเสมอตามความเหมาะสมเมื่อเล่นเสียงฉุกเฉินหรือเสียงที่มีความสำคัญต่อความปลอดภัย เพื่อให้ได้ยินเสียงดังกล่าวอย่างชัดเจน
[email protected]
AudioControl HAL เวอร์ชัน 2.0 เปิดตัว API ใหม่ต่อไปนี้
API | วัตถุประสงค์ |
---|---|
IAudioControl#registerFocusListener |
ลงทะเบียนอินสแตนซ์ของ IFocusListener กับ HAL ของ AudioControl Listener นี้ช่วยให้ HAL สามารถขอและยกเลิกโฟกัสเสียงได้ HAl มีอินสแตนซ์ ICloseHandle ที่จะให้ Android ใช้ยกเลิกการลงทะเบียนตัวรับฟัง |
IAudioControl#onAudioFocusChange |
แจ้ง HAL เกี่ยวกับการเปลี่ยนแปลงสถานะคำขอโฟกัสที่ HAL ส่งผ่าน IFocusListener รวมถึงการตอบกลับคำขอโฟกัสครั้งแรก |
IFocusListener#requestAudioFocus |
ขอโฟกัสในนามของ HAL สำหรับการใช้งานที่ระบุ รหัสโซน และประเภทการขยายโฟกัส |
IFocusListener#abandonAudioFocus |
ยกเลิกคำขอโฟกัส HAL ที่มีอยู่สำหรับการใช้งานและรหัสโซนที่ระบุ |
HAL อาจมีคำขอโฟกัสหลายรายการพร้อมกัน แต่จำกัดไว้ที่ 1 คำขอต่อการใช้งานและการจับคู่รหัสโซน Android จะถือว่า HAL เริ่มเล่นเสียงสำหรับการใช้งานทันทีเมื่อมีคำขอ และเล่นต่อไปจนกว่าจะไม่มีโฟกัส
นอกจาก registerFocusListener
แล้ว คำขอเหล่านี้จะเป็น oneway
เพื่อให้ Android ไม่ทำให้ HAL ล่าช้าขณะประมวลผลคำขอโฟกัส HAL ควรไม่รอรับโฟกัสก่อนเล่นเสียงที่สำคัญต่อความปลอดภัย HAL จะฟังและตอบสนองต่อการเปลี่ยนแปลงโฟกัสเสียงผ่าน IAudioControl#onAudioFocusChange
หรือไม่ก็ได้
บริการโฟกัสเสียงรถยนต์ของ OEM
ใน Android 14 AAOS ได้เปิดตัวบริการปลั๊กอิน OEM ของรถยนต์เพื่อเปิดใช้การกำหนดค่าสำหรับคอมโพเนนต์บางอย่างของรถยนต์ สำหรับบริการปลั๊กอินระบบเสียงรถยนต์ บริการปลั๊กอินจะช่วยให้ OEM จัดการคำขอโฟกัสที่ระบบเสียงรถยนต์ขัดจังหวะได้ ซึ่งช่วยให้ OEM มีความยืดหยุ่นมากขึ้นในการจัดการโฟกัสตามที่กฎระเบียบกำหนด ด้วยเหตุนี้ การทำงานร่วมกันของโหมดโฟกัสเสียงจึงอาจแตกต่างกันไปตามผู้ผลิตและภูมิภาค หลักการพื้นฐานสําหรับโฟกัสเสียงยังคงมีผลอยู่ ซึ่งก็คือแอปควรขอโฟกัสเพื่อการจัดการเสียงที่ดียิ่งขึ้นเพื่อปรับปรุงประสบการณ์ของผู้ใช้ โดยทั่วไปแล้ว กฎบางอย่างยังคงมีผลบังคับใช้กับคําขอโฟกัสเสียงของแอป ดังนี้
หากไม่มีโฟกัสเสียงที่มีลําดับความสําคัญสูงอยู่ (รวมถึงการโทร การแจ้งเตือนเหตุฉุกเฉิน หรือการแจ้งเตือนความปลอดภัย) แอปควรได้รับโฟกัสเสียงชั่วคราวหรือถาวร
ขณะที่โฟกัสสื่อทำงานอยู่
แอปที่ขอโฟกัสการใช้งานการโทรควรรับสายได้พร้อมกันหรือแบบพิเศษ
แอปที่ขอโฟกัสการใช้งานการนำทางควรได้รับโฟกัสการนำทางพร้อมกันหรือแบบพิเศษ
แอปที่ขอโฟกัสการใช้งาน Assistant ควรได้รับโฟกัสการใช้งานพร้อมกันหรือแบบพิเศษ
ขณะที่แอปโฟกัสเสียงที่มีลำดับความสำคัญสูง (รวมถึงการโทร ข้อความแจ้งเตือนเหตุฉุกเฉิน หรือการแจ้งเตือนความปลอดภัย) ทำงานอยู่ ระบบควรอนุมัติหรือเลื่อนคําขอโฟกัสเสียงที่เลื่อนเวลาไว้ซึ่งเข้ามาใหม่ตามต้องการ
แม้ว่าคำแนะนำเหล่านี้จะไม่ใช่คำแนะนำทั้งหมด แต่ก็สามารถช่วยให้แอปที่ขอโฟกัสได้รับโฟกัสได้หากไม่มีเสียงที่มีลำดับความสำคัญสูงที่ทำงานอยู่ แม้ว่าเสียงที่มีลำดับความสำคัญสูงจะทำงานอยู่ แต่คำขอโฟกัสที่เลื่อนเวลาไว้ก็ควรได้รับการดำเนินการและควรได้รับโฟกัสเมื่อเสียงที่มีลำดับความสำคัญสูงหยุดลง