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

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

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

חיבור VoIP ו-ConnectionService

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

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

בשלב הבא, מחזירים מופע של המחלקה הזו ב- ConnectionService כאשר מתרחשת שיחה נכנסת או יוצאת.

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

mAudioState = connection.getCallAudioState()

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

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

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

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

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

val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();

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

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

val availableBluetoothDevices: Collection
Collection

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

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

requestBluetoothAudio(availableBluetoothDevices[0]);

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

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

setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);