ניהול שיחות באמצעות Telecom API

במדריך הזה מוסבר איך לנתב אודיו למכשירי Bluetooth באמצעות Telecom API ומגדירים את החיבור עבור שיחות VoIP. לקריאת מדריך לבניית אפליקציית שיחות לפני שממשיכים.

באמצעות ConnectionService ו-Connection כיתות, יש לך גישה מצב אודיו ורשימה של מכשירי Bluetooth זמינים, ויכול לנתב אודיו למכשיר Bluetooth שנבחר.

חיבור VoIP ו-ConnectionService

יצירת כיתת VoIPConnection שנמצאת החל מ- Connection. הכיתה קובעת את מצב השיחה הנוכחית. כי מדריך לבניית אפליקציית שיחות להפוך את האפליקציה הזו לאפליקציה בניהול עצמי, ולהגדיר את מצב האודיו ל-VoIP תרגום מכונה.

Kotlin

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

Java

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()
  }
}

Java

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() מחזירה אם המכשיר מבצע סטרימינג באמצעות Bluetooth, אוזניה, חיבור קווי או רמקול.

mAudioState = connection.getCallAudioState()

המצב 'במצב' השתנה

הרשמה לשינויים ב-CallAudioState על ידי התעלמות onCallAudioStateChanged() השירות הזה מתריע על שינויים במדינה.

Kotlin

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

Java

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

קבלת המכשיר הנוכחי

משיגים את המכשיר הפעיל הנוכחי באמצעות CallAudioState.getActiveBluetoothDevice() הפונקציה הזו מחזירה את מכשיר ה-Bluetooth הפעיל.

Kotlin

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()

Java

BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

רכישת מכשירי Bluetooth

קבלת רשימה של מכשירי Bluetooth שזמינים לניתוב שיחות באמצעות CallAudioState.getSupportedBluetoothDevices()

Kotlin

val availableBluetoothDevices: Collection =
  mAudioState.getSupportedBluetoothDevices()

Java

Collection availableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();

ניתוב האודיו של השיחה

ניתוב האודיו של השיחה למכשיר Bluetooth זמין באמצעות requestBluetoothAudio(BluetoothDevice):

requestBluetoothAudio(availableBluetoothDevices[0]);

שימוש ברמת API 23 ומעלה

אפשר ROUTE_BLUETOOTH בלי לציין את המכשיר באמצעות setAudioRoute(int) הגדרת ברירת המחדל הזו היא ניתוב למכשירי Bluetooth פעילים הנוכחיים ב-Android 9 ואילך.

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);