Ser*_*kov 16 android bluetooth voip-android
我正在研究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上发现了类似的问题,但没有答案如何使其工作 通过蓝牙耳机接受呼叫
那么我是如何拦截蓝牙耳机服务的蓝牙按钮点击的呢?
也将我的答案从那里添加到这里。
这些事件在 HeadsetStateMachine 内部处理(位于 packages/apps/Bluetooth 下)。
这些事件被转发到 IBluetoothHeadsetPhone 接口。所有事件转发到的单个应用程序是在运行时通过 HeadsetStateMachine.java 中的绑定代码定义的。这是为了允许手机制造商在不使用默认应用程序的情况下将它们转发到自定义手机应用程序而不是默认应用程序。
Intent intent = new Intent(IBluetoothHeadsetPhone.class.getName());
intent.setComponent(intent.resolveSystemService(context.getPackageManager(), 0));
if (intent.getComponent() == null || !context.bindService(intent, mConnection, 0)) {
Log.e(TAG, "Could not bind to Bluetooth Headset Phone Service");
}
Run Code Online (Sandbox Code Playgroud)
要使事件转发到您的应用程序而不是默认的电话应用程序,您必须修改 aosp 代码。您需要在 HeadsetStateMachine 、BluetoothHeadsetPhone 代理或电话应用程序之一拦截事件。
不幸的是,如果不修改 aosp 代码,您正在寻找的内容目前是不可能的。Plantronics 等一些耳机具有转发到所有应用程序的自定义 BT 事件 - 某些现有 VoIP 应用程序支持这些自定义意图,以至少支持某些耳机应答呼叫。
归档时间: |
|
查看次数: |
807 次 |
最近记录: |