ऑडियो मैनेजर की मदद से मैनेज की जाने वाली कॉल गाइड

इस गाइड में वॉइस ओवर इंटरनेट प्रोटोकॉल (VoIP) जैसे ऐसे कम्यूनिकेशन ऐप्लिकेशन के बारे में बताया गया है जो अपने ऑडियो और सुनने लायक डिवाइस की स्थिति को खुद मैनेज करना चाहते हैं.

ऑडियो कॉलबैक रजिस्टर करें

सबसे पहले, एक AudioDeviceCallback बनाएं. इससे, डिवाइस से ऑडियो डिवाइसों के कनेक्ट या डिसकनेक्ट होने पर आपके ऐप्लिकेशन को सूचना दी जाती है.

KotlinJava
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);

कम्यूनिकेशन के लिए इस्तेमाल होने वाले डिवाइस का पता लगाएं

ऑडियो मैनेजर आपको यह बताता है कि फ़िलहाल कौनसा कम्यूनिकेशन डिवाइस चालू है.

KotlinJava
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();

कम्यूनिकेशन डिवाइस के बदलने की सूचना सुनने से आपके ऐप्लिकेशन को पता चलता है कि रूटिंग कब लागू की गई है और आपका चुना गया डिवाइस चालू है या नहीं.

KotlinJava
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 ऑडियो डिवाइस ढूंढें

VoIP कॉल के लिए कौनसे डिवाइस उपलब्ध हैं, यह देखने के लिए getAvailableCommuncationDevices() का इस्तेमाल करें. AudioDeviceInfo का इस्तेमाल करके देखें कि यह BLE हेडसेट है या नहीं. यह उदाहरण BLE Audio के साथ काम करने वाले पहले डिवाइस के बारे में बताया गया है. हालांकि, आपके पास ऐसे सभी डिवाइसों को ढूंढने का विकल्प भी है जिन पर यह सुविधा काम करती है. साथ ही, उपयोगकर्ताओं को यह विकल्प चुनने की अनुमति भी दी जा सकती है.

KotlinJava

// 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

कम्यूनिकेशन डिवाइस सेट करें

डिवाइस के साथ काम करने वाला डिवाइस ढूंढने के बाद, आपको जिस डिवाइस पर रूट करना है उसे सेट करने के लिए setCommunicationDevice का इस्तेमाल करें. नतीजे देखने पर, आपके ऐप्लिकेशन को यह पता चलता है कि क्या ऑडियो मैनेजर डिवाइस को सेट कर रहा है या डिवाइस में कोई गड़बड़ी हुई है.

KotlinJava

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 Audio डिवाइस सेट हो गया है. इसलिए, कॉल करते समय ऑडियो स्ट्रीम में सही ऑडियो रूटिंग होगी.

सेशन खत्म करें

अपने ऐप्लिकेशन के ज़रिए कॉल या सेशन खत्म होने के बाद, उस कम्यूनिकेशन डिवाइस का डेटा मिटाएं जो अब चालू है. इससे यह पक्का करने में मदद मिलती है कि अलग-अलग ऐप्लिकेशन पर जाने पर, उपयोगकर्ता को शानदार अनुभव मिले.

KotlinJava

// Clear the selection, ready for next call
audioManager
.clearCommunicationDevice()

// Clear the selection, ready for next call
audioManager
.clearCommunicationDevice();