دليل المكالمات المُدار ذاتيًا من خلال "مدير الصوت"

يتناول هذا الدليل تطبيقات الاتصال، مثل بروتوكول الصوت عبر الإنترنت (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() لمعرفة الأجهزة المتاحة لإجراء مكالمة عبر بروتوكول الصوت على الإنترنت. يمكنك استخدام 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();