این راهنما نحوه مسیریابی صدا برای دستگاههای بلوتوث با استفاده از Telecom API و تنظیم اتصال برای تماسهای VoIP را پوشش میدهد. قبل از ادامه، راهنمای ساخت اپلیکیشن تماس را بخوانید.
با استفاده از کلاس های ConnectionService
و Connection
، می توانید به وضعیت صدا و لیستی از دستگاه های بلوتوث موجود دسترسی داشته باشید و می توانید صدا را به یک دستگاه بلوتوث انتخابی هدایت کنید.
اتصال VoIP و ConnectionService
یک کلاس VoIPConnection
ایجاد کنید که از Connection
گسترش می یابد. این کلاس وضعیت تماس فعلی را کنترل می کند. همانطور که راهنمای Build a calling app بیان می کند، این برنامه را به یک برنامه خود مدیریت تبدیل کنید و حالت صوتی را برای یک برنامه 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()
برمی گردد اگر دستگاه با استفاده از بلوتوث، Earpiece، Wired یا Speaker در حال پخش جریانی باشد.
mAudioState = connection.getCallAudioState()
در وضعیت تغییر کرد
با نادیده گرفتن onCallAudioStateChanged()
در تغییرات CallAudioState مشترک شوید. این به شما از هرگونه تغییر در وضعیت هشدار می دهد.
کاتلین
fun onCallAudioStateChanged(audioState: CallAudioState) { mAudioState = audioState }
جاوا
@Override public void onCallAudioStateChanged(CallAudioState audioState) { mAudioState = audioState; }
دستگاه فعلی را دریافت کنید
دستگاه فعال فعلی را با استفاده از CallAudioState.getActiveBluetoothDevice()
دریافت کنید. این عملکرد دستگاه بلوتوث فعال را برمی گرداند.
کاتلین
val activeDevice: BluetoothDevice = mAudioState.getActiveBluetoothDevice()
جاوا
BluetoothDevice activeDevice = mAudioState.getActiveBluetoothDevice();
دستگاه های بلوتوث را دریافت کنید
با استفاده از CallAudioState.getSupportedBluetoothDevices()
فهرستی از دستگاه های بلوتوثی را که برای مسیریابی صدای تماس در دسترس هستند، دریافت کنید.
کاتلین
val availableBluetoothDevices: Collection= mAudioState.getSupportedBluetoothDevices()
جاوا
CollectionavailableBluetoothDevices = mAudioState.getSupportedBluetoothDevices();
صدای تماس را مسیریابی کنید
استفاده از API سطح 28 و بالاتر (توصیه می شود)
با استفاده از requestBluetoothAudio(BluetoothDevice)
صدای تماس را به یک دستگاه بلوتوث موجود هدایت کنید:
requestBluetoothAudio(availableBluetoothDevices[0]);
با استفاده از API سطح 23 و بالاتر
ROUTE_BLUETOOTH
بدون تعیین دستگاه با استفاده از setAudioRoute(int)
فعال کنید. این به طور پیشفرض مسیریابی به دستگاههای بلوتوث فعال فعلی را در Android 9 و بالاتر انجام میدهد.
setAudioRoute(CallAudioState.ROUTE_BLUETOOTH);