يشمل هذا الدليل كيفية توجيه الصوت للأجهزة التي تتضمّن بلوتوث باستخدام Talecom API وضبط الاتصال لإجراء مكالمات VoIP. اقرأ دليل إنشاء تطبيق اتصال قبل المتابعة.
باستخدام الصفَّين ConnectionService
وConnection
، يمكنك الوصول إلى
حالة الصوت وقائمة بأجهزة البلوتوث المتاحة، ويمكنك توجيه
الصوت إلى جهاز يتضمّن بلوتوث محدّد.
اتصال 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()
إذا كان الجهاز يبث المحتوى باستخدام البلوتوث أو سمّاعة الأذن أو السلكية أو
مكبّر الصوت.
mAudioState = connection.getCallAudioState()
عند تغيير الحالة
يمكنك الاشتراك في التغييرات في CallAudioState من خلال تجاوز
onCallAudioStateChanged()
.
وينبهك هذا بأي تغييرات تطرأ على الحالة.
Kotlin
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
Java
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
الحصول على الجهاز الحالي
يمكنك الحصول على الجهاز النشط الحالي باستخدام
CallAudioState.getActiveBluetoothDevice()
.
تؤدي هذه الوظيفة إلى إرجاع الجهاز النشط الذي يتضمّن بلوتوث.
Kotlin
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
Java
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
الحصول على أجهزة تتضمّن بلوتوث
احصل على قائمة بالأجهزة التي تتضمّن بلوتوث والمتاحة للتوجيه الصوتي للمكالمات باستخدام CallAudioState.getSupportedBluetoothDevices()
.
Kotlin
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
Java
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
توجيه صوت المكالمة
استخدام المستوى 28 لواجهة برمجة التطبيقات والمستويات الأعلى (يُنصح به)
يمكنك توجيه صوت المكالمة إلى جهاز متاح يتضمّن بلوتوث باستخدام
requestBluetoothAudio(BluetoothDevice)
:
requestBluetoothAudio(availableBluetoothDevices[0]);
تستخدِم المستوى 23 من واجهة برمجة التطبيقات والمستويات الأعلى
تفعيل
ROUTE_BLUETOOTH
بدون تحديد الجهاز باستخدام
setAudioRoute(int)
.
يحدِّد هذا الإعداد تلقائيًا التوجيه إلى أجهزة البلوتوث الحالية والنشطة على نظام التشغيل Android 9 والإصدارات الأحدث.
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);