این راهنما برنامههای ارتباطی مانند Voice over Internet Protocol (VoIP) را پوشش میدهد که میخواهند وضعیت دستگاه صوتی و شنیدنی خود را خود مدیریت کنند.
ثبت تماس صوتی
ابتدا یک AudioDeviceCallback
ایجاد کنید، که برنامه شما را هنگام اتصال یا قطع شدن دستگاه های صوتی از دستگاه مطلع می کند.
کاتلین
val audioDeviceCallback: AudioDeviceCallback = object : AudioDeviceCallback() { override fun onAudioDevicesAdded(addedDevices: Array) {} override fun onAudioDevicesRemoved(removedDevices: Array ) {} } audioManager.registerAudioDeviceCallback(audioDeviceCallback)
جاوا
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() { @Override public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) { } @Override public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) { // Handle device removal } }; audioManager.registerAudioDeviceCallback(audioDeviceCallback);
دستگاه ارتباطی فعال را بررسی کنید
مدیر صدا به شما امکان می دهد بدانید کدام دستگاه ارتباطی در حال حاضر فعال است.
کاتلین
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
جاوا
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
گوش دادن به زمانی که یک دستگاه ارتباطی تغییر کرده است، به برنامه شما امکان میدهد متوجه شود که مسیریابی اعمال میشود و دستگاهی که انتخاب کردهاید فعال است.
کاتلین
val listener = OnCommunicationDeviceChangedListener { device -> // Handle changes currentCommunicationDevice = device } audioManager.addOnCommunicationDeviceChangedListener(executor, listener)
جاوا
AudioManager.OnCommunicationDeviceChangedListener listener = new AudioManager.OnCommunicationDeviceChangedListener() { @Override void onCommunicationDeviceChanged(AudioDeviceInfo device) { // Handle changes currentCommunicationDevice = device; } }; AudioManager.addOnCommunicationDeviceChangedListener(executor, listener);
دستگاه صوتی BLE را پیدا کنید
از getAvailableCommuncationDevices()
استفاده کنید تا ببینید کدام دستگاه ها برای تماس VoIP در دسترس هستند. از AudioDeviceInfo
استفاده کنید تا ببینید آیا دستگاه یک هدست BLE است یا خیر. این مثال به دنبال اولین دستگاهی است که از صدای BLE پشتیبانی میکند، اما ممکن است در نظر داشته باشید که همه دستگاههای پشتیبانیشده را بیابید و به کاربران اجازه انتخاب بدهید.
کاتلین
// Get list of currently available devices
val devices = audioManager.availableCommunicationDevices
// User choose one of the devices, let's say, TYPE_BLE_HEADSET
val userSelectedDeviceType = AudioDeviceInfo.TYPE_BLE_HEADSET
//for the device from the list
var selectedDevice: AudioDeviceInfo? = null
for (device in devices) {
if (device.type == userSelectedDeviceType) {
selectedDevice = device
break
}
}
جاوا
// Get list of currently available devices
List devices = audioManager.getAvailableCommunicationDevices();
// User choose one of the devices, for example, TYPE_BLE_HEADSET
int userSelectedDeviceType = AudioDeviceInfo.TYPE_BLE_HEADSET;
// Filter for the device from the list
AudioDeviceInfo selectedDevice = null;
for (AudioDeviceInfo device : devices) {
if (device.getType() == userSelectedDeviceType) {
selectedDevice = device;
break;
}
}
دستگاه ارتباطی را تنظیم کنید
پس از یافتن دستگاه سازگار، از setCommunicationDevice
برای تنظیم دستگاهی که می خواهید به آن مسیریابی کنید، استفاده کنید. بررسی نتیجه به برنامه شما اطلاع میدهد که آیا مدیر صدا سعی دارد دستگاه را تنظیم کند یا با خطا مواجه شده است.
کاتلین
val result = audioManager.setCommunicationDevice(selectedDevice)
if (!result) {
// Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)
جاوا
boolean result = audioManager.setCommunicationDevice(selectedDevice);
if (!result) {
// Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)
اکنون که دستگاه صوتی BLE تنظیم شده است، هنگام برقراری تماس، جریان صوتی مسیریابی صحیح صوتی را خواهد داشت.
جلسه را تمام کنید
پس از اتمام تماس یا جلسه برنامه، دستگاه ارتباط فعال را پاک کنید. این کمک می کند تا اطمینان حاصل شود که کاربر در هنگام جابجایی بین برنامه های مختلف تجربه خوبی دارد.
کاتلین
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
جاوا
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();