يتناول هذا الدليل تطبيقات الاتصال، مثل بروتوكول الصوت على الإنترنت (VoIP) التي تريد الإدارة الذاتية لحالة الصوت والجهاز السمعي.
تسجيل معاودة الاتصال الصوتية
أولاً، عليك إنشاء AudioDeviceCallback
لإرسال إشعار إلى تطبيقك عند اتصال أجهزة صوتية بالجهاز أو إلغاء ربطها.
Kotlin
val audioDeviceCallback: AudioDeviceCallback = object : AudioDeviceCallback() { override fun onAudioDevicesAdded(addedDevices: Array) {} override fun onAudioDevicesRemoved(removedDevices: Array ) {} } audioManager.registerAudioDeviceCallback(audioDeviceCallback)
Java
final AudioDeviceCallback audioDeviceCallback = new AudioDeviceCallback() { @Override public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) { } @Override public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) { // Handle device removal } }; audioManager.registerAudioDeviceCallback(audioDeviceCallback);
التحقق من وجود جهاز اتصال نشط
يتيح لك مدير الصوت معرفة جهاز الاتصال المفعَّل حاليًا.
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
Java
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
وعند رصد تغيير في جهاز اتصال، يمكن لتطبيقك معرفة وقت تطبيق التوجيه وأن الجهاز الذي اخترته نشط.
Kotlin
val listener = OnCommunicationDeviceChangedListener { device -> // Handle changes currentCommunicationDevice = device } audioManager.addOnCommunicationDeviceChangedListener(executor, listener)
Java
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 Audio، ولكن يمكنك أيضًا العثور على جميع الأجهزة المتوافقة والسماح للمستخدمين بالاختيار.
Kotlin
// 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
}
}
Java
// 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
لضبط الجهاز الذي تريد التوجيه إليه. من خلال التحقّق من النتيجة، يتم إعلام تطبيقك بما إذا كان مدير الصوت يحاول ضبط الجهاز أو إذا واجه خطأً.
Kotlin
val result = audioManager.setCommunicationDevice(selectedDevice)
if (!result) {
// Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)
Java
boolean result = audioManager.setCommunicationDevice(selectedDevice);
if (!result) {
// Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)
بعد أن تم ضبط جهاز BLE Audio، سيتضمّن البث الصوتي التوجيه الصوتي الصحيح عند إجراء مكالمة.
إنهاء الجلسة
بعد انتهاء تطبيقك من مكالمة أو جلسة، عليك محو بيانات جهاز الاتصال النشط. يساعد هذا في ضمان حصول المستخدم على تجربة رائعة عند التنقل بين التطبيقات المختلفة.
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
Java
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();