HAL điều khiển âm thanh được ra mắt trong Android 9 để hỗ trợ các trường hợp sử dụng âm thanh liên quan đến ô tô. Kể từ Android 14, HAL điều khiển âm thanh hỗ trợ:
- Làm mờ và cân bằng
- Yêu cầu quyền phát âm thanh HAL
- Tắt tiếng và giảm âm lượng thiết bị
- Thay đổi mức tăng của thiết bị âm thanh
- Thay đổi cấu hình cổng âm thanh
Hình 1 cho thấy thông tin tổng quan cấp cao về cấu trúc dịch vụ âm thanh trên ô tô, trong đó dịch vụ âm thanh trên ô tô giao tiếp với HAL điều khiển âm thanh.
Hình 1. Định cấu hình âm thanh nhiều vùng.
Hiệu ứng mờ dần và cân bằng âm thanh
HAL điều khiển âm thanh HIDL phiên bản 1 được ra mắt trong Android 9 để hỗ trợ hiệu ứng mờ dần và cân bằng âm thanh trong các trường hợp sử dụng ô tô. Ngoài các hiệu ứng âm thanh chung đã có trong Android, cơ chế này cho phép các ứng dụng hệ thống đặt độ cân bằng và độ mờ của âm thanh thông qua các API CarAudioManager
:
class CarAudioManager {
/**
* Adjust the relative volume in the front vs back of the vehicle cabin.
*
* @param value in the range -1.0 to 1.0 for fully toward the back through
* fully toward the front. 0.0 means evenly balanced.
*/
@SystemApi
@RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
public void setFadeTowardFront(float value);
/**
* Adjust the relative volume on the left vs right side of the vehicle cabin.
*
* @param value in the range -1.0 to 1.0 for fully toward the left through
* fully toward the right. 0.0 means evenly balanced.
*/
@SystemApi
@RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
public void setBalanceTowardRight(float value);
}
Sau khi các API này được gọi, các API HAL điều khiển âm thanh tương ứng sẽ được gọi từ dịch vụ âm thanh trên ô tô:
interface IAudioControl {
/**
* Control the right/left balance setting of the car speakers.
*/
oneway setBalanceTowardRight(float value);
/**
* Control the fore/aft fade setting of the car speakers.
*/
oneway setFadeTowardFront(float value);
}
API này có trên mọi phiên bản của HAL điều khiển âm thanh, bao gồm cả giao diện HAL AIDL mới.
Yêu cầu quyền phát âm thanh từ HAL
AAOS, tương tự như Android, dựa vào sự tham gia tích cực của các ứng dụng vào chế độ lấy tiêu điểm âm thanh để quản lý việc phát âm thanh trong ô tô. Thông tin về tiêu điểm được dùng để quản lý luồng cần kiểm soát âm lượng và giảm âm lượng. Do đó, để mở rộng hơn nữa khả năng lấy nét âm thanh và cung cấp khả năng tích hợp tốt hơn các âm thanh dành riêng cho ô tô vào trải nghiệm Android, các thuộc tính âm thanh sau đã được giới thiệu trong Android 11:
EMERGENCY
SAFETY
VEHICLE_STATUS
ANNOUNCEMENT
Ngoài thay đổi này, một cơ chế đã được thêm vào để những âm thanh phát ra từ bên ngoài Android có thể tham gia vào các yêu cầu lấy tiêu điểm âm thanh. Do đó, HIDL audio control HAL phiên bản 2 đã được ra mắt để cho phép các yêu cầu lấy tiêu điểm bắt nguồn từ bên ngoài Android:
interface IAudioControl {
/**
* Registers focus listener to be used by HAL for requesting and
* abandoning audio focus.
* @param listener the listener interface
* @return closeHandle A handle to unregister observer.
*/
registerFocusListener(IFocusListener listener)
generates (ICloseHandle closeHandle);
/**
* Notifies HAL of changes in audio focus status for focuses requested
* or abandoned by the HAL.
*
* @param usage The audio usage associated with the focus change
* @param zoneId The identifier for the audio zone that the HAL is
* playing the stream in
* @param focusChange the AudioFocusChange that has occurred
*/
oneway onAudioFocusChange(bitfield<AudioUsage> usage, int32_t zoneId,
bitfield<AudioFocusChange> focusChange);
}
Trong đó, IFocusListener
được xác định như sau:
interface IFocusListener {
/**
* Called whenever HAL is requesting focus as it is starting to play
* audio of a given usage in a specified zone.
*
* @param usage The audio usage associated with the focus request
* {@code AttributeUsage}
* @param zoneId The identifier for the audio zone where the HAL is
* requesting focus
* @param focusGain The AudioFocusChange associated with this request.
*/
oneway requestAudioFocus(bitfield<AudioUsage> usage,
int32_t zoneId, bitfield<AudioFocusChange> focusGain);
/**
* Called whenever HAL is abandoning focus as it is finished playing audio
* of a given usage in a specific zone.
*
* @param usage The audio usage for which the HAL is abandoning focus
* {@code AttributeUsage}
* @param zoneId The identifier for the audio zone that the HAL
* abandoning focus
*/
oneway abandonAudioFocus(bitfield<AudioUsage> usage, int32_t zoneId);
}
Bạn có thể dùng các API ở trên để yêu cầu và huỷ bỏ chế độ lấy nét âm thanh từ HAL, theo thứ tự tương ứng. Để phản hồi, dịch vụ âm thanh trên ô tô sẽ xem xét yêu cầu lấy tiêu điểm âm thanh và chuyển tiếp kết quả một cách không đồng bộ đến phương thức IAudioControl#onAudioFocusChange
.
Bạn cũng có thể dùng API này để theo dõi các thay đổi đối với yêu cầu quyền phát âm thanh bắt nguồn từ HAL điều khiển âm thanh. Nhìn chung, mọi yêu cầu lấy tiêu điểm âm thanh đang chờ xử lý từ HAL đều được coi là đang hoạt động. Điều này khác với yêu cầu lấy tiêu điểm âm thanh từ Android, trong đó chỉ có một yêu cầu phát bản âm thanh đang hoạt động tương ứng mới được coi là đang hoạt động.
Di chuyển HIDL sang HAL điều khiển âm thanh AIDL
Với sự ra đời của AIDL và quá trình di chuyển bắt buộc trong Android 12 (để tìm hiểu thêm, hãy xem AIDL cho HAL), HAL điều khiển âm thanh đã được di chuyển sang AIDL. Đối với các API HIDL kiểm soát âm thanh phiên bản 2 hiện có, quá trình di chuyển yêu cầu các bản cập nhật nhỏ cho các phương thức hiện có:
interface IAudioControl {
/**
* Notifies HAL of changes in audio focus status for focuses requested
* or abandoned by the HAL.
*
* @param usage The audio usage associated with the focus change
* {@code AttributeUsage}. See {@code audioUsage} in
* audio_policy_configuration.xsd for the list of allowed values.
* @param zoneId The identifier for the audio zone that the HAL is
* playing the stream in
* @param focusChange the AudioFocusChange that has occurred.
*/
oneway void onAudioFocusChange(in String usage, in int zoneId,
in AudioFocusChange focusChange);
/**
* Registers focus listener to be used by HAL for requesting and
* abandoning audio focus.
* @param listener the listener interface.
*/
oneway void registerFocusListener(in IFocusListener listener);
/**
* Control the right/left balance setting of the car speakers.
*/
oneway void setBalanceTowardRight(in float value);
/**
* Control the fore/aft fade setting of the car speakers.
*/
oneway void setFadeTowardFront(in float value);
}
Và IFocusListener
tương ứng:
interface IFocusListener {
/**
* Called whenever HAL is abandoning focus as it is finished playing audio
* of a given usage in a specific zone.
*
* @param usage The audio usage for which the HAL is abandoning focus
* {@code AttributeUsage}. See {@code audioUsage} in
* audio_policy_configuration.xsd for the list of allowed values.
* @param zoneId The identifier for the audio zone that the HAL
* abandoning focus
*/
oneway void abandonAudioFocus(in String usage, in int zoneId);
/**
* Called whenever HAL is requesting focus as it is starting to play audio
* of a given usage in a specified zone.
*
* @param usage The audio usage associated with the focus request
* {@code AttributeUsage}. See {@code audioUsage} in
* audio_policy_configuration.xsd for the list of allowed values.
* @param zoneId The identifier for the audio zone where the HAL is
* requesting focus
* @param focusGain The AudioFocusChange associated with this request.
*/
oneway void requestAudioFocus(in String usage, in int zoneId,
in AudioFocusChange focusGain);
}
Tắt tiếng theo nhóm
Android 12 ra mắt tính năng tắt tiếng theo nhóm âm lượng để cho phép kiểm soát việc tắt tiếng toàn diện hơn trong các hoạt động tương tác âm thanh của người dùng. Điều này cho phép HAL điều khiển âm thanh nhận các sự kiện tắt tiếng do dịch vụ âm thanh trên ô tô chặn.
Để bật tính năng này, các OEM phải đặt cấu hình audioUseCarVolumeGroupMuting
thành true
trong dịch vụ ô tô config.xml
:
<!-- Configuration to enable muting of individual volume groups.
If this is set to false, muting of individual volume groups is disabled,
instead muting will toggle master mute. If this is set to true, car volume
group muting is enabled and each individual volume group can be muted separately. -->
<bool name="audioUseCarVolumeGroupMuting">true</bool>
Trước Android 13, bạn phải ghi đè cấu hình bằng lớp phủ tài nguyên thời gian chạy cho packages/services/Car/service/res/values/config.xml
(để tìm hiểu thêm, hãy xem phần Tuỳ chỉnh bản dựng bằng lớp phủ tài nguyên). Từ Android 13, bạn có thể dùng lớp phủ tài nguyên trong thời gian chạy để thay đổi giá trị cấu hình. Để tìm hiểu thêm, hãy xem bài viết Thay đổi giá trị của tài nguyên ứng dụng trong thời gian chạy.
Các ứng dụng hệ thống có thể xác định xem tính năng này có được bật hay không bằng cách sử dụng API CarAudioManager#isAudioFeatureEnabled
. Tham số được truyền vào phải là hằng số CarAudioManager.AUDIO_FEATURE_VOLUME_GROUP_MUTING
. Phương thức này trả về true
nếu tính năng này được bật trên thiết bị, nếu không thì trả về false
.
Ngoài việc bật tính năng audioUseCarVolumeGroupMuting
, HAL điều khiển âm thanh AIDL phải triển khai cơ chế tắt tiếng nhóm âm lượng:
interface IAudioControl {
/**
* Notifies HAL of changes in output devices that the HAL should apply
* muting to.
*
* This will be called in response to changes in audio mute state for each
* volume group and will include a {@link MutingInfo} object per audio
* zone that experienced a mute state event.
*
* @param mutingInfos an array of {@link MutingInfo} objects for the audio
* zones where audio mute state has changed.
*/
oneway void onDevicesToMuteChange(in MutingInfo[] mutingInfos);
}
Trong đó, thông tin tắt tiếng chứa thông tin tắt tiếng thích hợp cho hệ thống âm thanh:
parcelable MutingInfo {
/**
* ID of the associated audio zone
*/
int zoneId;
/**
* List of addresses for audio output devices that should be muted.
*/
String[] deviceAddressesToMute;
/**
* List of addresses for audio output devices that were previously be
* muted and should now be unmuted.
*/
String[] deviceAddressesToUnmute;
}
AAOS có 2 cơ chế tắt tiếng dựa trên:
Sự kiện chính sử dụng âm thanh KEYCODE_VOLUME_MUTE.
Gọi trực tiếp đến dịch vụ âm thanh trên ô tô bằng API tắt tiếng của trình quản lý âm thanh trên ô tô,
CarAudioManager#setVolumeGroupMute
.
Khi được bật, cả hai cơ chế này đều kích hoạt chế độ tắt tiếng cuộc gọi cho HAL điều khiển âm thanh.
Tính năng giảm âm thanh trên ô tô
Android 12 giới thiệu tính năng giảm âm lượng âm thanh trên ô tô để tối ưu hoá khả năng kiểm soát việc phát đồng thời các luồng âm thanh. Điều này cho phép các OEM triển khai hành vi giảm âm lượng của riêng họ dựa trên cấu hình âm thanh thực tế của ô tô và trạng thái phát hiện tại, do dịch vụ âm thanh của ô tô xác định.
Cơ chế giảm âm lượng dựa trên các thay đổi về ngăn xếp tiêu điểm âm thanh. Bất cứ khi nào có thay đổi về tiêu điểm (cho dù là yêu cầu tiêu điểm hay từ bỏ tiêu điểm), HAL điều khiển âm thanh sẽ được thông báo. Tương tự như tính năng hỗ trợ tắt tiếng nhóm âm lượng trên ô tô, bạn có thể bật tính năng giảm âm thanh trên ô tô bằng cờ cấu hình audioUseHalDuckingSignals
:
<!-- Configuration to enable IAudioControl#onDevicesToDuckChange API to
inform HAL when to duck. If this is set to true, the API will receive signals
indicating which output devices to duck as well as what usages are currently
holding focus. If set to false, the API will not be called. -->
<bool name="audioUseHalDuckingSignals">true</bool>
Để bật tính năng này, HAL điều khiển âm thanh AIDL phải triển khai logic liên quan bằng tín hiệu nhận được từ dịch vụ âm thanh trên ô tô:
interface IAudioControl {
/**
* Notifies HAL of changes in output devices that the HAL should apply
* ducking to.
*
* This will be called in response to changes in audio focus, and will
* include a {@link DuckingInfo} object per audio zone that experienced
* a change in audo focus.
*
* @param duckingInfos an array of {@link DuckingInfo} objects for the
* audio zones where audio focus has changed.
*/
oneway void onDevicesToDuckChange(in DuckingInfo[] duckingInfos);
}
Thông tin hệ thống âm thanh có liên quan nằm trong thông tin giảm âm lượng âm thanh:
parcelable DuckingInfo {
/**
* ID of the associated audio zone
*/
int zoneId;
/**
* List of addresses for audio output devices that should be ducked.
*/
String[] deviceAddressesToDuck;
/**
* List of addresses for audio output devices that were previously be
* ducked and should now be unducked.
*/
String[] deviceAddressesToUnduck;
/**
* List of usages currently holding focus for this audio zone.
*/
String[] usagesHoldingFocus;
}
Ngoài thông tin cấu hình âm thanh trên ô tô có trong địa chỉ thiết bị để (huỷ) giảm âm lượng, thông tin giảm âm lượng cũng chứa thông tin về những cách sử dụng thuộc tính âm thanh đang giữ tiêu điểm. Mục đích của dữ liệu này là thông báo cho hệ thống âm thanh biết những cách sử dụng thuộc tính âm thanh nào đang hoạt động.
Điều này là bắt buộc vì trong cấu hình âm thanh trên ô tô, bạn có thể chỉ định nhiều thuộc tính âm thanh cho một thiết bị duy nhất và nếu không có thông tin bổ sung, bạn sẽ không biết những cách sử dụng nào đang hoạt động.
HAL kiểm soát âm thanh AIDL 2.0
Để cập nhật API và hỗ trợ chức năng mới, HAL điều khiển âm thanh AIDL đã được cập nhật lên phiên bản 2.0 trong Android 13:
- Quyền phát âm thanh với
PlaybackTrackMetadata
- Lệnh gọi lại mức tăng âm thanh
Siêu dữ liệu phát được xác định trong android.hardware.audio.common
như sau:
parcelable PlaybackTrackMetadata {
AudioUsage usage = INVALID;
AudioContentType contentType = UNKNOWN;
float gain;
AudioChannelLayout channelMask;
AudioDevice sourceDevice;
String[] tags;
}
Tất cả các chức năng khác của phiên bản 1.0 của chế độ kiểm soát âm thanh AIDL vẫn được giữ nguyên và có thể sử dụng. Có một trường hợp ngoại lệ liên quan đến phương thức thay đổi tiêu điểm âm thanh, như mô tả trong phần Phương thức thay đổi tiêu điểm âm thanh.
Tiêu điểm điều khiển âm thanh có siêu dữ liệu của bản phát
Để cung cấp thêm thông tin cho hệ thống âm thanh bên dưới HAL, các bản cập nhật hiện cung cấp PlaybackTrackMetadata
. Cụ thể, HAL điều khiển âm thanh đã được mở rộng bằng một phương thức mới:
interface IAudioControl {
/**
* Notifies HAL of changes in audio focus status for focuses requested
* or abandoned by the HAL.
*
* The HAL is not required to wait for a callback of AUDIOFOCUS_GAIN
* before playing audio, nor is it required to stop playing audio in the
* event of a AUDIOFOCUS_LOSS callback is received.
*
* @param playbackMetaData The output stream metadata associated with
* the focus request
* @param zoneId The identifier for the audio zone that the HAL is
* playing the stream in
* @param focusChange the AudioFocusChange that has occurred.
*/
oneway void onAudioFocusChangeWithMetaData(
in PlaybackTrackMetadata playbackMetaData, in int zoneId,
in AudioFocusChange focusChange);
}
Một thay đổi tương tự và tương ứng được thực hiện đối với IFocusListener
:
/**
* Called to indicate that the audio output stream associated with
* {@link android.hardware.audio.common.PlaybackTrackMetadata} is
* abandoning focus as playback has stopped.
*
* @param playbackMetaData The output stream metadata associated with
* the focus request
* @param zoneId The identifier for the audio zone that the HAL
* abandoning focus
*/
oneway void abandonAudioFocusWithMetaData(
in PlaybackTrackMetadata playbackMetaData, in int zoneId);
/**
* Called to indicate that the audio output stream associated with
* {@link android.hardware.audio.common.PlaybackTrackMetadata} has taken
* the focus as playback is starting for the corresponding stream.
*
* @param playbackMetaData The output stream metadata associated with
* the focus request
* @param zoneId The identifier for the audio zone that the HAL
* abandoning focus
* @param focusGain The focus type requested.
*/
oneway void requestAudioFocusWithMetaData(
in PlaybackTrackMetadata playbackMetaData, in int zoneId,
in AudioFocusChange focusGain);
}
Phương thức thay đổi quyền phát âm thanh
Các thao tác lấy tiêu điểm ở trên hoạt động theo cách tương tự như các thao tác được mô tả trong phần Yêu cầu lấy tiêu điểm âm thanh từ HAL. Chỉ siêu dữ liệu của bản nhạc phát mới có thêm thông tin cùng với các cách sử dụng thuộc tính âm thanh. Nhìn chung, trừ phi cần có thông tin bổ sung do siêu dữ liệu của bản phát lại cung cấp, HAL điều khiển Android đã cập nhật có thể tiếp tục sử dụng các phương thức trước đó.
Nếu nhà phát triển HAL quyết định không hỗ trợ IAudioControl#onAudioFocusChangeWithMetaData
, phương thức này sẽ trả về kết quả có lỗi UNKNOWN_TRANSACTION
như mô tả trong phần Sử dụng các phương thức giao diện có phiên bản.
Dịch vụ âm thanh trước tiên sẽ gọi onAudioFocusChangeWithMetaData
rồi thử lại bằng phương thức onAudioFocusChange
nếu kết quả là lỗi UNKNOWN_TRANSACTION
.
Tính năng giảm âm thanh trong ô tô bằng siêu dữ liệu của bản phát
HAL điều khiển âm thanh AIDL phiên bản 2.0 đã thêm siêu dữ liệu của bản phát vào thông tin giảm âm lượng âm thanh:
parcelable DuckingInfo {
/**
* ID of the associated audio zone
*/
int zoneId;
/**
* List of addresses for audio output devices that should be ducked.
*/
String[] deviceAddressesToDuck;
/**
* List of addresses for audio output devices that were previously be
* ducked and should now be unducked.
*/
String[] deviceAddressesToUnduck;
/**
* List of usages currently holding focus for this audio zone.
*/
String[] usagesHoldingFocus;
/**
* List of output stream metadata associated with the current focus
* holder for this audio zone
*/
@nullable PlaybackTrackMetadata[] playbackMetaDataHoldingFocus;
}
Ngừng sử dụng usagesHoldingFocus
. Giờ đây, nhà phát triển nên dùng playbackMetaDataHoldingFocus
để xác định mức sử dụng thuộc tính âm thanh và các thông tin khác về âm thanh. Tuy nhiên, tham số usagesHoldingFocus
vẫn chứa thông tin bắt buộc cho đến khi lựa chọn này chính thức bị xoá.
Lệnh gọi lại mức tăng âm thanh
Để AAOS trong Android 13 nhận biết rõ hơn những thay đổi về âm thanh bên dưới HAL, chúng tôi đã thêm một cơ chế mà bạn có thể dùng để truyền đạt những thay đổi về mức tăng âm thanh từ hệ thống âm thanh của ô tô đến dịch vụ âm thanh của ô tô. Cơ chế này cho thấy các thay đổi về chỉ số âm lượng khuếch đại âm thanh cùng với lý do tương ứng khiến mức khuếch đại thay đổi:
- Quy định hạn chế về việc bị chặn hoặc tắt tiếng
- Quy định hạn chế
- Hạn chế về suy hao
Những thay đổi này sẽ hiển thị các hạn chế này từ bên dưới HAL cho dịch vụ âm thanh trên ô tô và cuối cùng là cho một ứng dụng giao diện người dùng hệ thống để thông báo cho người dùng. Phần sau, tức là khả năng tiếp xúc với giao diện người dùng hệ thống, đã được mở rộng hơn nữa trong Android 14 để cho phép các ứng dụng giao diện người dùng hệ thống dễ dàng nhận được thông tin này thông qua cơ chế gọi lại thông tin nhóm âm lượng.
API HAL điều khiển âm thanh đăng ký lệnh gọi lại mức tăng như sau:
interface IAudioControl {
/**
* Registers callback to be used by HAL for reporting unexpected gain(s)
* changed and the reason(s) why.
*
* @param callback The {@link IAudioGainCallback}.
*/
oneway void registerGainCallback(in IAudioGainCallback callback);
}
IAudioGainCallback
được xác định như sau:
interface IAudioGainCallback {
/**
* Used to indicate that one or more audio device port gains have changed,
* i.e. initiated by HAL, not by CarAudioService.
* This is the counter part of the
* {@link onDevicesToDuckChange}, {@link onDevicesToMuteChange} and,
* {@link setAudioDeviceGainsChanged} APIs.
*
* @param reasons List of reasons that triggered the given gains changed.
* @param gains List of gains affected by the change.
*/
void onAudioDeviceGainsChanged(in Reasons[] reasons,
in AudioGainConfigInfo[] gains);
}
Như được nêu bật trong tài liệu API, lệnh gọi lại mức tăng được dịch vụ âm thanh trên ô tô đăng ký với HAL điều khiển âm thanh. Khi API được gọi từ HAL điều khiển âm thanh, dịch vụ âm thanh trên ô tô sẽ phản hồi bằng một thao tác tương ứng (chẳng hạn như chặn, giới hạn hoặc giảm chỉ số tăng) .
HAL xác định thời điểm API được gọi, chủ yếu là để báo cáo các thay đổi về trạng thái chỉ số độ khuếch đại. Cụ thể đối với các yêu cầu về quy định, hệ thống âm thanh của ô tô phải thực hiện hành động bắt buộc và sử dụng lệnh gọi lại để báo cáo thông tin cho dịch vụ âm thanh của ô tô nhằm cho phép người dùng sử dụng. Ví dụ: để hiện giao diện người dùng cho người dùng.
HAL điều khiển âm thanh AIDL 3.0
HAL điều khiển âm thanh AIDL Android 14 được cập nhật lên phiên bản 3.0 để cập nhật các API nhằm cung cấp chức năng chỉ mục mức tăng âm thanh mạnh mẽ hơn. API HAL điều khiển âm thanh cho phép dịch vụ âm thanh đặt và huỷ đặt IModuleChangeCallback
:
interface IAudioControl {
/**
* Sets callback with HAL for notifying changes to hardware module
* (that is: {@link android.hardware.audio.core.IModule}) configurations.
*
* @param callback The {@link IModuleChangeCallback} interface to use
* use when new updates are available for
*/
void setModuleChangeCallback(in IModuleChangeCallback callback);
/**
* Clears module change callback
*/
void clearModuleChangeCallback();
}
setModuleChangeCallback
được dịch vụ âm thanh trên ô tô đăng ký khi dịch vụ bắt đầu hoặc khi khôi phục sau lỗi. Ví dụ: thông báo về sự cố liên kết HAL điều khiển âm thanh do dịch vụ âm thanh trên ô tô nhận được. Việc triển khai HAL điều khiển âm thanh sẽ thay thế mọi lệnh gọi lại thay đổi mô-đun hiện có khi API được gọi.
Đối với API clearModuleChangeCallback
, quá trình triển khai phải xoá lệnh gọi lại hiện có hoặc không làm gì nếu không có lệnh gọi lại nào. Bạn nên triển khai chế độ kiểm soát âm thanh để đăng ký một trình theo dõi sự cố cho lệnh gọi lại, sau đó xoá lệnh gọi lại nếu sự cố xảy ra trên liên kết.
IModuleChangeCallback
được xác định như sau:
oneway interface IModuleChangeCallback {
/**
* Used to indicate that one or more {@link AudioPort} configs have
* changed. Implementations MUST return at least one AudioPort.
*
* @param audioPorts list of {@link AudioPort} that are updated
*/
void onAudioPortsChanged(in AudioPort[] audioPorts);
}
Khi lệnh gọi lại thay đổi mô-đun được dịch vụ âm thanh trên ô tô đăng ký, dịch vụ này sẽ sẵn sàng nhận các thay đổi về cổng âm thanh thông qua API onAudioPortChanged
. Bạn có thể dùng API này để khởi tạo mức tăng âm lượng cho hệ thống âm thanh ngay khi đăng ký lệnh gọi lại. Đối với các thay đổi khác về độ khuếch đại động, bạn có thể gọi API bất cứ lúc nào. Các thay đổi tương ứng sẽ được áp dụng và dịch vụ âm thanh trên ô tô sẽ được cập nhật cho phù hợp.