এই গাইডে ভয়েস-ওভার ইন্টারনেট প্রোটোকল (VoIP)-এর মতো কমিউনিকেশন অ্যাপ্লিকেশন কভার করা হয়, যা তাদের অডিও এবং শোনা যায় এমন ডিভাইসের স্ট্যাটাস নিজে থেকে ম্যানেজ করতে চায়।
অডিও কলব্যাক রেজিস্টার করুন
প্রথমে, একটি AudioDeviceCallback তৈরি করুন, যা ডিভাইস থেকে অডিও ডিভাইস কানেক্ট বা ডিসকানেক্ট হলে আপনার অ্যাপকে বিজ্ঞপ্তি দেয়।
Kotlin
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);
অ্যাক্টিভ কমিউনিকেশন ডিভাইস চেক করুন
বর্তমানে কোন কমিউনিকেশন ডিভাইস অ্যাক্টিভ আছে তা অডিও ম্যানেজার থেকে জানতে পারবেন।
Kotlin
val currentCommunicationDevice: AudioDeviceInfo? = audioManager.communicationDevice
জাভা
AudioDeviceInfo currentCommunicationDevice = audioManager.getCommunicationDevice();
কমিউনিকেশন ডিভাইস পরিবর্তন করা হলে, আপনার অ্যাপ জানতে পারে যে কখন রাউটিং প্রয়োগ করা হয়েছে এবং আপনার বেছে নেওয়া ডিভাইস অ্যাক্টিভ আছে।
Kotlin
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() ব্যবহার করুন। ডিভাইসটি BLE হেডসেট কিনা তা দেখতে AudioDeviceInfo ব্যবহার করুন। এই উদাহরণে BLE অডিও কাজ করে এমন প্রথম ডিভাইস খোঁজা হয়, তবে আপনি কাজ করে এমন সব ডিভাইস খুঁজে ব্যবহারকারীকে বেছে নেওয়ার সুযোগ দেওয়ার কথাও বিবেচনা করতে পারেন।
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
}
}
জাভা
// Get list of currently available devices
List<AudioDeviceInfo> 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)
জাভা
boolean result = audioManager.setCommunicationDevice(selectedDevice);
if (!result) {
// Handle error.
}
// Wait for currentCommunicationDevice to become selectedDevice with a timeout (e.g. 30s)
এখন BLE অডিও ডিভাইস সেট করা হয়ে গেছে, কল করার সময় অডিও স্ট্রিমে সঠিক অডিও রাউটিং থাকবে।
সেশন শেষ করুন
আপনার অ্যাপ কোনও কল বা সেশন শেষ করার পরে, অ্যাক্টিভ কমিউনিকেশন ডিভাইসটি মুছে দিন। এটি বিভিন্ন অ্যাপ্লিকেশনের মধ্যে পরিবর্তন করার সময় ব্যবহারকারীর অভিজ্ঞতা যাতে দুর্দান্ত হয় তা নিশ্চিত করতে সাহায্য করে।
Kotlin
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice()
জাভা
// Clear the selection, ready for next call
audioManager.clearCommunicationDevice();