টেলিকম API ব্যবহার করে কল ম্যানেজ করা

এই গাইডে Telecom API ব্যবহার করে ব্লুটুথ ডিভাইসের জন্য কীভাবে অডিও রুট করতে হয় এবং VoIP কলের জন্য কানেকশন সেট করতে হয় তা কভার করা হয়েছে। চালিয়ে যাওয়ার আগে কলিং অ্যাপ তৈরি করুন গাইড পড়ুন।

ConnectionService এবং Connection ক্লাস ব্যবহার করে, আপনি অডিওর স্ট্যাটাস এবং উপলভ্য ব্লুটুথ ডিভাইসের তালিকা অ্যাক্সেস করতে পারবেন এবং বেছে নেওয়া ব্লুটুথ ডিভাইসে অডিও রুট করতে পারবেন।

VoIP কানেকশন ও ConnectionService

Connection থেকে এক্সটেন্ড করে এমন একটি VoIPConnection ক্লাস তৈরি করো। এই ক্লাস বর্তমান কলের স্ট্যাটাস নিয়ন্ত্রণ করে। কলিং অ্যাপ তৈরি করুন গাইডে যেমন বলা হয়েছে, এটিকে একটি সেল্ফ-ম্যানেজড অ্যাপ্লিকেশন হিসেবে তৈরি করুন এবং VoIP অ্যাপ্লিকেশনের জন্য অডিও মোড সেট করুন।

Kotlin

class VoIPConnection : Connection() {
  init {
    setConnectionProperties(PROPERTY_SELF_MANAGED)
    setAudioModeIsVoip(true)
  }
}

জাভা

public class VoIPConnection extends Connection {
  public VoIPConnection() {
    setConnectionProperties(PROPERTY_SELF_MANAGED);
    setAudioModeIsVoip(true);
  }
}

এরপর, ইনকামিং বা আউটগোয়িং কল হলে ConnectionService-এ এই ক্লাসের একটি ইনস্ট্যান্স রিটার্ন করুন।

Kotlin

class VoIPConnectionService : ConnectionService() {
  override fun onCreateOutgoingConnection(
    connectionManagerPhoneAccount: PhoneAccountHandle,
    request: ConnectionRequest,
  ): Connection {
    return VoIPConnection()
  }
}

জাভা

public class VoIPConnectionService extends ConnectionService {
  @Override
  public Connection onCreateOutgoingConnection(PhoneAccountHandle connectionManagerPhoneAccount, ConnectionRequest request) {
    return new VoIPConnection();
  }
}

ম্যানিফেস্ট সঠিকভাবে VoIPConnectionService ক্লাসকে নির্দেশ করছে কিনা তা নিশ্চিত করুন।

<service android:name=".voip.TelegramConnectionService" android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
  <intent-filter>
    <action android:name="android.telecom.ConnectionService"/>
  </intent-filter>
</service>

এইসব কাস্টম Connection এবং ConnectionService ক্লাসের মাধ্যমে, আপনি কল চলাকালীন কোন ডিভাইস এবং কোন ধরনের অডিও রাউটিং ব্যবহার করতে চান তা নিয়ন্ত্রণ করতে পারবেন।

বর্তমান অডিওর স্টেট জানুন

বর্তমান অডিও স্ট্যাটাস পেতে, getCallAudioState() কল করুন। getCallAudioState() ডিভাইসটি ব্লুটুথ, ইয়ারপিস, তারযুক্ত বা স্পিকার ব্যবহার করে স্ট্রিমিং করছে কিনা তা রিটার্ন করে।

mAudioState = connection.getCallAudioState()

স্ট্যাটাস পরিবর্তন হলে

onCallAudioStateChanged() ওভাররাইড করে CallAudioState-এ পরিবর্তন সাবস্ক্রাইব করুন। এটি আপনাকে রাজ্যের কোনও পরিবর্তন সম্পর্কে সতর্ক করে।

Kotlin

fun onCallAudioStateChanged(audioState: CallAudioState) {
  mAudioState = audioState
}

জাভা

@Override
public void onCallAudioStateChanged(CallAudioState audioState) {
  mAudioState = audioState;
}

বর্তমান ডিভাইসটি পান

CallAudioState.getActiveBluetoothDevice() ব্যবহার করে বর্তমানে অ্যাক্টিভ ডিভাইস পান। এই ফাংশন অ্যাক্টিভ ব্লুটুথ ডিভাইস রিটার্ন করে।

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

জাভা

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

ব্লুটুথ ডিভাইস পান

CallAudioState.getSupportedBluetoothDevices() ব্যবহার করে কল অডিও রাউটিংয়ের জন্য উপলভ্য ব্লুটুথ ডিভাইসের তালিকা পান।

Kotlin

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

জাভা

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

কলের অডিও রাউট করুন

requestBluetoothAudio(BluetoothDevice) ব্যবহার করে উপলভ্য ব্লুটুথ ডিভাইসে কলের অডিও পাঠান:

requestBluetoothAudio(availableBluetoothDevices[0]);

API লেভেল ২৩ এবং তার পরবর্তী যেকোনও ভার্সন ব্যবহার করা হচ্ছে

setAudioRoute(int) ব্যবহার করে ডিভাইস নির্দিষ্ট না করেই ROUTE_BLUETOOTH চালু করুন। Android 9 ও তার পরবর্তী যেকোনও ভার্সনে এটি ডিফল্ট হিসেবে বর্তমান, অ্যাক্টিভ ব্লুটুথ ডিভাইসে রাউট করে।

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);