HAL điều khiển âm thanh được giới thiệu 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ợ:
- Hiệu ứng 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 về độ lợi của thiết bị âm thanh
- Thay đổi về 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.
Chậm dần và cân bằng âm thanh
HAL điều khiển âm thanh HIDL phiên bản 1 được giới thiệu trong Android 9 để hỗ trợ chế độ làm mờ 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 cung cấp trong Android, cơ chế này cho phép các ứng dụng hệ thống đặt độ cân bằng âm thanh và làm mờ 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 tất cả các phiên bản 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
Tương tự như Android, AAOS dựa vào sự tham gia tích cực của các ứng dụng trên tiêu điểm âm thanh để quản lý việc phát âm thanh trong ô tô. Thông tin tiêu điểm được dùng để quản lý luồng cần kiểm soát âm lượng và chế độ giảm âm. Do đó, để mở rộng thêm tiêu điểm âm thanh và 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 đây đã được giới thiệu trong Android 11:
EMERGENCY
SAFETY
VEHICLE_STATUS
ANNOUNCEMENT
Ngoài thay đổi này, chúng tôi đã thêm một cơ chế cho âm thanh bắt nguồn từ bên ngoài Android để tham gia vào các yêu cầu lấy tiêu điểm âm thanh. Do đó, HAL điều khiển âm thanh HIDL phiên bản 2 đã được giới thiệu để 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 là:
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ể sử dụng các API ở trên để yêu cầu và từ bỏ quyền phát âm thanh từ HAL tương ứng. Để phản hồi, dịch vụ âm thanh trên ô tô sẽ xem xét yêu cầu tiêu điểm âm thanh và chuyển tiếp kết quả 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 tiêu điểm âm thanh cố định từ HAL đều được coi là đang hoạt động, khác với yêu cầu tiêu điểm âm thanh từ Android, trong đó chỉ chế độ 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à việc di chuyển bắt buộc trong Android 12 (để tìm hiểu thêm, hãy xem phần AIDL cho HAL), HAL điều khiển âm thanh đã được di chuyển sang AIDL. Đối với các API điều khiển âm thanh HIDL phiên bản 2 hiện có, quá trình di chuyển yêu cầu cập nhật nhỏ đối với 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 nhóm âm lượng
Android 12 đã ra mắt tính năng tắt tiếng nhóm âm lượng để cho phép điều khiển chế độ tắt tiếng một cách toàn diện hơn trong các hoạt động tương tác bằng â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, 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). Kể từ Android 13, bạn có thể sử dụng lớp phủ tài nguyên 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 của ứ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 liên quan 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ó hai cơ chế tắt tiếng khác nhau, dựa trên:
Sự kiện nhấn phím 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 đến HAL điều khiển âm thanh.
Giảm âm thanh trên ô tô
Android 12 đã ra mắt tính năng giảm âm thanh trên ô tô để tối ưu hoá việc kiểm soát chế độ phát đồng thời các luồng âm thanh. Điều này cho phép OEM triển khai hành vi giảm âm 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 trên ô tô xác định.
Cơ chế giảm âm thanh 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 xảy ra 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 được chứa trong thông tin giảm â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ị để (bật/tắt) chế độ giảm âm, thông tin giảm âm cũng chứa thông tin về việc sử dụng thuộc tính âm thanh nào đ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 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ị và nếu không có thông tin bổ sung, bạn sẽ không biết rõ cách sử dụng nào đang hoạt động.
HAL 2.0 kiểm soát âm thanh AIDL
Để 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 bằng
PlaybackTrackMetadata
- Lệnh gọi lại 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ả chức năng khác của phiên bản 1.0 của chức năng điều khiển âm thanh AIDL vẫn còn và có thể sử dụng. Có một 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 Trên phương thức thay đổi tiêu điểm âm thanh.
Tiêu điểm điều khiển âm thanh bằng siêu dữ liệu của bản nhạc phát
Để hiển thị 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 hiển thị 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ự, 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);
}
Về 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 giống như các thao tác được mô tả trong 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ách sử dụng các thuộc tính âm thanh. Nhìn chung, trừ phi cần thêm thông tin do siêu dữ liệu của kênh phát 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
, thì phương thức này sẽ trả về kết quả với lỗi UNKNOWN_TRANSACTION
như mô tả trong phần Sử dụng phương thức giao diện phiên bản.
Trước tiên, dịch vụ âm thanh sẽ gọi onAudioFocusChangeWithMetaData
, sau đó thử lại bằng phương thức onAudioFocusChange
nếu xảy ra lỗi UNKNOWN_TRANSACTION
.
Tính năng giảm âm thanh trên ô tô bằng siêu dữ liệu của bản nhạc phát
Phiên bản 2.0 của HAL điều khiển âm thanh AIDL đã thêm siêu dữ liệu của bản nhạc phát vào thông tin về tính năng giảm â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 sử dụng playbackMetaDataHoldingFocus
để xác định mức sử dụng thuộc tính âm thanh và các thông tin âm thanh khác. Tuy nhiên, tham số usagesHoldingFocus
vẫn chứa thông tin bắt buộc cho đến khi tuỳ chọn này bị xoá chính thức.
Lệnh gọi lại tăng âm thanh
Để giúp AAOS trong Android 13 thấy rõ hơn các 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ể sử dụng để thông báo các 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ỉ mục âm lượng của mức tăng âm thanh cùng với lý do tương ứng khiến mức tăng đó thay đổi:
- Quy định hạn chế bị chặn hoặc bị tắt tiếng
- Quy định hạn chế về giới hạn
- Hạn chế về độ suy hao
Những thay đổi này cho thấy các quy định hạn chế này từ bên dưới HAL đến dịch vụ âm thanh trên ô tô và cuối cùng là đến ứ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, hiển thị giao diện người dùng hệ thống có thể có, được mở rộng thêm 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 hơn thông qua cơ chế gọi lại thông tin nhóm phương tiện.
API HAL điều khiển âm thanh đăng ký lệnh gọi lại gain 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ư đã nêu trong tài liệu API, lệnh gọi lại tăng cườ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ỉ mục tăng) .
HAL xác định thời điểm gọi API, chủ yếu là để báo cáo các thay đổi đối với trạng thái chỉ mục lợi tức. Riêng đối với các yêu cầu theo 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 trên ô tô nhằm cho phép người dùng sử dụng. Ví dụ: để hiển thị giao diện người dùng cho người dùng.
HAL 3.0 điều khiển âm thanh AIDL
Phiên bản HAL điều khiển âm thanh AIDL của 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 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ự kiện liên kết HAL điều khiển âm thanh bị gián đoạn mà 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. Bạn nên đăng ký trình quan sát sự kiện ngừng hoạt động cho lệnh gọi lại trong quá trình triển khai chức năng điều khiển âm thanh, sau đó xoá lệnh gọi lại nếu sự kiện ngừng hoạt động của liên kết được kích hoạ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 dịch vụ âm thanh trên ô tô đăng ký lệnh gọi lại thay đổi mô-đun, lệnh gọi lại đó 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ể sử dụng API này để khởi chạy 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ề mức tăng độ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 tương ứng.