इस गाइड में वॉइस ओवर इंटरनेट प्रोटोकॉल (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 ऑडियो डिवाइस ढूंढें
VoIP कॉल के लिए कौनसे डिवाइस उपलब्ध हैं, यह देखने के लिए 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();