ก่อนที่จะเริ่มสตรีมเชิงตรรกะ แอปจะขอโฟกัสเสียงโดยใช้แอตทริบิวต์เสียงเดียวกันกับที่ใช้สำหรับสตรีมเชิงตรรกะ แอปต้องคำนึงถึงการสูญเสียโฟกัส เพื่อให้ทำงานได้ตามที่คาดไว้ในกรณีการใช้งานยานยนต์
แม้ว่าเราจะแนะนำให้ส่งคำขอโฟกัส แต่ระบบก็ไม่ได้บังคับ ดังนั้น ให้พิจารณาการโฟกัสเป็นวิธีควบคุมและหลีกเลี่ยงความขัดแย้งโดยอ้อม ระหว่างการเล่นแทนที่จะใช้เป็นกลไกการควบคุมเสียงหลัก ยานพาหนะ ไม่ควรขึ้นอยู่กับระบบโฟกัสในการทำงานของระบบย่อยเสียง
การโต้ตอบโฟกัส
เพื่อรองรับ AAOS ระบบจะจัดการคำขอโฟกัสเสียงตาม
การโต้ตอบที่กำหนดไว้ล่วงหน้าระหว่าง CarAudioContext
ของคำขอและ
ผู้ถือครองโฟกัสปัจจุบัน การโต้ตอบมี 3 ประเภท ได้แก่
- พิเศษ
- ปฏิเสธ
- พร้อมกัน
การโต้ตอบแบบพิเศษ
นี่คือรูปแบบการโต้ตอบที่ใช้กับ Android บ่อยที่สุด
ในการโต้ตอบแบบพิเศษ จะอนุญาตให้แอปเดียวถือโฟกัสได้ในแต่ละครั้ง
ดังนั้น คำขอโฟกัสขาเข้าจะได้รับโฟกัสในขณะที่ผู้ถือโฟกัสที่มีอยู่จะสูญเสียโฟกัส เนื่องจากทั้ง 2 แอปเล่นสื่อได้ เราจึงอนุญาตให้แอปใดแอปหนึ่งถือ
โฟกัสได้เพียงแอปเดียว ด้วยเหตุนี้ ระบบจึงส่งคำขอโฟกัสของแอปที่เพิ่งเริ่มต้นพร้อมกับ
AUDIOFOCUS_REQUEST_GRANTED
ในขณะที่แอปเพลงที่กำลังเล่นจะได้รับ
เหตุการณ์การเปลี่ยนแปลงโฟกัสที่มีสถานะการสูญเสียซึ่งสอดคล้องกับประเภทคำขอ
ที่ส่ง
ปฏิเสธการโต้ตอบ
เมื่อใช้การโต้ตอบปฏิเสธ ระบบจะปฏิเสธคำขอขาเข้าเสมอ เช่น เมื่อพยายามเปิดเพลงขณะที่กำลังโทร ในกรณีนี้ หาก Dialer ถือโฟกัสเสียงสำหรับการโทรและแอปที่ 2 ขอโฟกัส
เพื่อเล่นเพลง แอปเพลงจะได้รับ AUDIOFOCUS_REQUEST_FAILED
เป็นการตอบกลับ
คำขอ เนื่องจากคำขอโฟกัสถูกปฏิเสธ จึงไม่มีการส่งการสูญเสียโฟกัส
ไปยังผู้ถือครองโฟกัสปัจจุบัน
การโต้ตอบพร้อมกัน
การโต้ตอบพร้อมกันเป็นฟีเจอร์เฉพาะของ AAOS ซึ่งจะช่วยให้แอปที่ขอโฟกัสเสียงในรถสามารถถือโฟกัสพร้อมกับแอปอื่นๆ ได้ หากต้องการให้ การโต้ตอบพร้อมกันเกิดขึ้น คุณต้องดูแลให้เป็นไปตามเงื่อนไขต่อไปนี้ The:
คำขอโฟกัสขาเข้าต้องขอ 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; }
เมื่อคำขอเกิดความล่าช้า Listener โฟกัสจะจัดการการเปลี่ยนแปลงโฟกัส ดังนี้
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: เราได้เปิดตัวฟีเจอร์ใหม่ของโอเวอร์เลย์ทรัพยากรขณะรันไทม์ (RRO) ซึ่งเป็นแฟล็ก
audioUseFadeManagerConfiguration
เพื่อเปิดหรือ ปิดใช้ฟีเจอร์นี้- ฟีเจอร์นี้ปิดใช้อยู่โดยค่าเริ่มต้น
- หากต้องการเปิดใช้งานการสูญเสียโฟกัสเสียงที่บังคับใช้โดยระบบ OEM ต้อง
ตั้งค่าสถานะนี้เป็น
true
- แม้ว่าเฟรมเวิร์กเสียงในรถยนต์จะคาดหวังคำจำกัดความการกำหนดค่าการเฟดที่ถูกต้องเมื่อเปิดใช้ แฟล็ก แต่การไม่มีคำจำกัดความดังกล่าวไม่ได้ส่งผลให้เกิดข้อยกเว้นร้ายแรงโดยอัตโนมัติ
- แอปทั้งหมดของการกำหนดค่าการจางต้องมีคำจำกัดความการจางที่ตรงกัน การเรียกใช้การกำหนดค่าเฟด (ตามชื่อ) เป็นส่วนหนึ่งของการกำหนดค่าเครื่องเสียงรถยนต์โดยไม่มีคำจำกัดความที่ถูกต้องถือเป็นข้อผิดพลาดร้ายแรง
- เมื่อปิดใช้ฟีเจอร์นี้ ระบบจะไม่สนใจคำจำกัดความการกำหนดค่าการจางทั้งหมดและการอ้างอิงการกำหนดค่า
การกำหนดค่า Fade Manager
เฟรมเวิร์กเสียงของ Android 15 เปิดตัว FadeManagerConfiguration
แบบรวมเพื่อให้ OEM ควบคุมลักษณะการทำงานของการจางเสียงได้อย่างละเอียด กรอบงานนี้
แสดงในรูปที่ 3 ดังนี้
รูปที่ 3 การกำหนดค่า Fade Manager
การกำหนดค่านี้ประกอบด้วย
- คุณสมบัติการเปลี่ยนแบบจาง: การตั้งค่าสำหรับการจางออกและการจางเข้า
- กำหนดได้โดยใช้การใช้งานหรือแอตทริบิวต์เสียงที่เฉพาะเจาะจง
- อนุญาตให้ตั้งค่าระยะเวลาที่กำหนดเอง
- การตั้งค่าเหล่านี้ใช้ในการสร้าง
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()
เมธอด Builder ดังนี้
/** @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 อย่างเหมาะสมเมื่อเล่นเสียงฉุกเฉินหรือเสียงที่มีความสำคัญต่อความปลอดภัย เพื่อให้แน่ใจว่าได้ยินเสียงอย่างชัดเจน
AudioControl@2.0
AudioControl HAL เวอร์ชัน 2.0 มี API ใหม่ดังนี้
API | วัตถุประสงค์ |
---|---|
IAudioControl#registerFocusListener |
ลงทะเบียนอินสแตนซ์ของ IFocusListener ด้วย
HAL ของ AudioControl Listener นี้ช่วยให้ HAL ขอและละทิ้งโฟกัสเสียงได้
HAL มีอินสแตนซ์ ICloseHandle ที่ Android ใช้เพื่อยกเลิกการลงทะเบียน Listener
|
IAudioControl#onAudioFocusChange |
แจ้ง HAL เกี่ยวกับการเปลี่ยนแปลงสถานะของคำขอโฟกัสที่ HAL สร้างขึ้น
ผ่าน IFocusListener รวมถึงการตอบกลับคำขอโฟกัสเริ่มต้น
|
IFocusListener#requestAudioFocus |
คำขอจะมุ่งเน้นในนามของ HAL สำหรับการใช้งานที่ระบุ, รหัสโซน และประเภทการเพิ่มโฟกัส |
IFocusListener#abandonAudioFocus |
ยกเลิกคำขอโฟกัส HAL ที่มีอยู่สำหรับการใช้งานและโซนที่ระบุ Id |
HAL สามารถมีคำขอโฟกัสหลายรายการพร้อมกันได้ แต่จำกัดไว้ที่ 1 คำขอต่อการใช้งานและการจับคู่รหัสโซน Android จะถือว่า HAL เริ่มเล่นเสียงสำหรับการใช้งานทันที เมื่อมีการส่งคำขอ และจะเล่นต่อไป จนกว่าจะละทิ้งโฟกัส
นอกเหนือจาก registerFocusListener
แล้ว คำขอเหล่านี้ยังoneway
เพื่อให้มั่นใจว่า
Android จะไม่หน่วงเวลา HAL ขณะประมวลผลคำขอโฟกัส HAL ไม่ควรรอให้ได้โฟกัสก่อนจึงจะเล่นเสียงที่มีความสำคัญต่อความปลอดภัย HAL จะฟังและตอบสนองต่อการเปลี่ยนแปลงโฟกัสเสียงผ่าน IAudioControl#onAudioFocusChange
หรือไม่ก็ได้
บริการโฟกัสเสียงในรถยนต์ของ OEM
ใน Android 14 ทาง AAOS ได้เปิดตัวบริการปลั๊กอิน OEM ของรถยนต์เพื่อเปิดใช้ การกำหนดค่าสำหรับคอมโพเนนต์บางอย่างของรถยนต์ สำหรับบริการปลั๊กอินเสียงในรถยนต์ บริการปลั๊กอิน จะช่วยให้ OEM จัดการคำขอโฟกัสที่บริการเสียงในรถยนต์ สกัดกั้นไว้ได้ ซึ่งจะช่วยให้ OEM มีความยืดหยุ่นมากขึ้นในการจัดการโฟกัสตามที่กฎและระเบียบกำหนด ดังนั้น การโต้ตอบการโฟกัสเสียงอาจแตกต่างกันไปในแต่ละ ผู้ผลิตและในแต่ละภูมิภาค หลักการพื้นฐานสำหรับการโฟกัสเสียง ยังคงมีอยู่ นั่นคือแอปควรขอโฟกัสเพื่อจัดการเสียงได้ดียิ่งขึ้น เพื่อปรับปรุงประสบการณ์ของผู้ใช้ โดยทั่วไปแล้ว กฎบางอย่างยังคงมีผลบังคับใช้กับคำขอโฟกัสเสียงจากแอป ดังนี้
หากไม่มีสถานะใดๆ แอปที่เน้นเสียงที่มีลำดับความสำคัญสูง (รวมถึงการโทร การแจ้งเตือนเหตุฉุกเฉิน หรือการแจ้งเตือนด้านความปลอดภัย) ควรได้รับโฟกัสเสียง ชั่วคราวหรือถาวร
ขณะที่โฟกัสสื่อทำงานอยู่
แอปที่ขอโฟกัสการใช้งานการโทรควรรับสายได้ทั้งแบบพร้อมกันหรือแบบเฉพาะ
แอปที่ขอโฟกัสการใช้งานการนำทางควรรับโฟกัสการนำทาง ได้พร้อมกันหรือแยกกัน
แอปที่ขอโฟกัสการใช้งาน Assistant ควรรับโฟกัสการใช้งานได้ พร้อมกันหรือเฉพาะเจาะจง
ขณะที่แอปที่เน้นเสียงที่มีลำดับความสำคัญสูง (รวมถึงการโทร การแจ้งเตือนฉุกเฉิน หรือการแจ้งเตือนด้านความปลอดภัย) ทำงานอยู่ ระบบควรให้สิทธิ์หรือเลื่อนคำขอโฟกัสเสียงที่เข้ามา ซึ่งล่าช้าตามความจำเป็น
แม้ว่าคำแนะนำเหล่านี้จะไม่ครอบคลุมทั้งหมด แต่ก็ช่วยให้แอปที่ขอโฟกัสได้รับโฟกัสได้หากไม่มีเสียงที่มีลำดับความสำคัญสูงที่ทำงานอยู่ แม้ว่าเสียงที่มีลำดับความสำคัญสูงจะทำงานอยู่ แต่คำขอโฟกัสที่ล่าช้าก็ควรได้รับการพิจารณา และควรได้รับโฟกัสเมื่อเสียงที่มีลำดับความสำคัญสูงหยุดลง