标签: voip-android

通过蓝牙耳机VoIP接听电话

我正在研究VoIP-Android-App和该应用程序需要能够接受/拒绝通话蓝牙耳机.

但问题是在添加连接到SCO之后

    audioManager.startBluetoothSco()
    audioManager.isBluetoothScoOn = true
Run Code Online (Sandbox Code Playgroud)

一旦我点击耳机按钮,我可以听到通常在我接受使用电话呼叫时发出的声音,所以我假设一些android系统组件捕获此信号并且不会进一步抛出它

我已经尝试过了:

1)电话状态监听器(它始终是IDLE)

   val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
   phoneStateListener = MyPhoneStateListener()
   tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE)
Run Code Online (Sandbox Code Playgroud)

2)MediaSession +静音噪音+媒体按钮监听器第一次点击不起作用,第二次+点击正确处理

3)MEDIA_BUTTON接收器不起作用

我在SO上发现了类似的问题,但没有答案如何使其工作 通过蓝牙耳机接受呼叫

那么我是如何拦截蓝牙耳机服务的蓝牙按钮点击的呢?

android bluetooth voip-android

16
推荐指数
1
解决办法
807
查看次数

通过蓝牙耳机接听电话

我正在开发VoIP-Android-App.我想通过活动中的连接蓝牙耳机接受和拒绝来电.

到目前为止我尝试了什么:

  • 使用媒体会话接收媒体按钮点击.

    问题:如果我们启动BluetoothSCO,我们不会收到任何Media Button点击.如果我们不启动BluetoothSCO,我们会收到Media Button点击,但我们无法区分长按和短按,因为停机时间始终为0,键码始终为KEYCODE_MEDIA_PLAY,ACTION_DOWN后面紧跟ACTION_UP.只有通过蓝牙连接时才会出现这些问题.如果我们通过有线耳机连接,我们会获得相应的密钥代码(KEYCODE_HEADSETHOOK),停机时间不为0.

  • 使用BroadcastReceiver监听蓝牙SCO连接的变化.

    private val scoReceiver = object : BroadcastReceiver() {
        fun onReceive(context: Context, intent: Intent) {
            val state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1)
            val previousState = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_PREVIOUS_STATE, -1)
            if (state == AudioManager.SCO_AUDIO_STATE_DISCONNECTED && previousState == AudioManager.SCO_AUDIO_STATE_CONNECTED) {
                Log.e(TAG, "SCO Disconnected")
                hangupCall()
            }
        }
    }
    
    protected fun onStart() {
        super.onStart()
        val intentFilter = IntentFilter()
        intentFilter.addAction(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)
        registerReceiver(scoReceiver, intentFilter)
    }
    
    Run Code Online (Sandbox Code Playgroud)

    通过这种方法,我可以检测用户何时挂断电话,例如长按蓝牙耳机,因为这会触发SCO断开连接.

    问题:我们无法检测用户是否想接听来电.

  • 使用dispatchKeyEvent,onKeyDownonKeyUp.

    问题:他们从来没有被召唤过.

有没有人有任何建议或最佳实践如何正确处理蓝牙耳机?非常感谢任何帮助.提前致谢!

android headset android-bluetooth android-broadcastreceiver voip-android

12
推荐指数
1
解决办法
1030
查看次数

AudioFocus 在同一个添加的 Call、android 9 和 10 中请求拒绝 OpenTok(Tokbox)

Android 电信管理器在添加的 VOIP 呼叫中没有传入的音频/声音

我正在尝试在我的应用中添加 VOIP 视频通话。我已经注册了电话帐户并将呼叫添加到 TelecomManager。呼叫被成功接受。我已经实现了 Connection 和 ConnectionService。

我正在使用以下代码添加呼叫。

var uri = Android.Net.Uri.FromParts(PhoneAccount.SchemeSip, voipCallInfo.Payload?.CallerName, null);
extras.PutParcelable(TelecomManager.ExtraIncomingCallAddress, uri);
extras.PutParcelable(TelecomManager.ExtraPhoneAccountHandle, phoneAccountHandle);
telecomManager.AddNewIncomingCall(phoneAccountHandle, extras);
Run Code Online (Sandbox Code Playgroud)

我正在使用下面的代码来接听来电。

var telecomManager = GetTelecomManager();
if (telecomManager == null)
{
     logger.Error("Telecom Manager is null, May be permissions not granted");
     return;
}
try
{
     .
     .
     .
     telecomManager.AcceptRingingCall();
     .
     .
}
catch (Exception ex)
{
     logger.Error("RequestSystemToAnswerCall Exception : " + ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

我试图请求音频焦点,但是当我在电信管理器中添加呼叫时,我的应用程序失去了焦点,因为电话开始响铃。在我接受通话应用程序后,我没有获得焦点,我相信 Telecom/Call 有焦点,但我什么也听不到。通话中的另一个人可以毫无问题地听到我的声音。当我结束通话时,应用程序会重新获得焦点。

我可以在日志中看到下面的内容。

    2020-06-22,14:09:34.831 WebRTCManager Trace IsAudioSubscriptionEnabled True 
[AudioManager] Use of stream …
Run Code Online (Sandbox Code Playgroud)

android xamarin tokbox opentok voip-android

8
推荐指数
1
解决办法
526
查看次数

VOIP通话录音

我正在开发一个在 android 中录制 VOIP 通话的项目,我没有找到任何解决方案,有很多应用程序支持手机上的 VOIP 录音。我找不到任何教程和帮助。Cube Call Recorder是提供此功能的应用程序之一,但我不知道该怎么做。我通过使用 android MediaRecorder开始录音然后启动 whatsapp 呼叫进行了测试,因此其他人无法听到我的声音。通话后,我检查了录音中只保存了我的声音。

作为一项研究,我对一些 apk 进行了逆向工程,我发现它们在 apk 中使用了辅助功能权限。

<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
Run Code Online (Sandbox Code Playgroud)

我不知道我需要了解哪些事情,我怎样才能知道 VOIP 呼叫来来去去,就像BroadcastReceiver 一样

然后,我将了解如何记录通话。

android whatsapp call-recording voip-android

5
推荐指数
1
解决办法
1905
查看次数

Android Twilio视频通话,唤醒应用程序并进入前台

我正在尝试通过Twilio视频通话提供本地视频通话体验。这是场景:

  1. 人员AAA呼叫人员BBB。
  2. 人BBB没有打开应用程序,在后台或前景中,应用程序处于终止状态,甚至可能锁定了电话。
  3. 当来自AAA的呼叫到达时,将使用带有应答按钮的视频ui打开该应用程序。就像在WhatsApp,Google Duo,Skype中一样...

我们已经建立了FCM,并且正在接收推送通知。尝试在通话到达时立即打开视频通话接听按钮,而不单击通知,就像在Whatsapp,Google Duo中一样(在Android手机中)

我们试图让服务在后台运行并打开一个套接字。当向套接字发出传入呼叫事件时,套接字将监听传入的呼叫并打开VideoCallActivity。

这是我们最好的选择,但到目前为止没有成功。您将如何实现此功能?

video android call twilio voip-android

4
推荐指数
1
解决办法
1054
查看次数