gpt4 book ai didi

android - 通过蓝牙耳机 VoIP 接听电话

转载 作者:IT老高 更新时间:2023-10-28 23:36:20 26 4
gpt4 key购买 nike

我正在开发一个 VoIP-Android-App,该应用需要能够通过蓝牙耳机接听/拒绝通话。

但问题是添加到SCO的连接后

    audioManager.startBluetoothSco()
audioManager.isBluetoothScoOn = true

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

我已经尝试过的:

1) 电话状态监听器(它总是空闲的)

   val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
phoneStateListener = MyPhoneStateListener()
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE)

2) MediaSession + 无声噪音 + 媒体按钮监听器不适用于第一次点击,第二次+点击正确处理

3) MEDIA_BUTTON 接收器不工作

我在 SO 上发现了一个类似的问题,但没有答案如何使它工作 Accepting a Call via Bluetooth Headset

那么无论如何我可以从蓝牙耳机服务中拦截蓝牙按钮点击吗?

最佳答案

Accepting a Call via Bluetooth Headset

也将我的答案从那里添加到这里。

这些事件在 HeadsetStateMachine 内部处理(在 packages/apps/Bluetooth 下)。

这些事件被转发到 IBluetoothHeadsetPhone 接口(interface)。将所有事件转发到的单个应用程序在运行时通过 HeadsetStateMachine.java 中的绑定(bind)代码定义。这是为了让手机制造商在不使用默认应用的情况下将它们转发到自定义手机应用程序而不是默认应用程序。

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");
}

要使事件转发到您的应用程序而不是默认电话应用程序,您必须修改 aosp 代码。您需要在 HeadsetStateMachine、BluetoothHeadsetPhone 代理或电话应用程序之一拦截事件。

不幸的是,如果不修改 aosp 代码,您目前无法找到您要查找的内容。某些耳机(如 Plantronics)具有自定义 BT 事件,这些事件会转发到所有应用程序 - 一些现有的 VoIP 应用程序支持这些自定义 Intent ,以支持至少为某些耳机接听电话。

关于android - 通过蓝牙耳机 VoIP 接听电话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51630886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com