首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过蓝牙耳机VoIP接听电话

通过蓝牙耳机VoIP接听电话
EN

Stack Overflow用户
提问于 2018-08-01 10:20:27
回答 1查看 1.9K关注 0票数 16

我正在开发一个VoIP-Android,这个应用程序需要能够接受/拒绝通话,蓝牙耳机认为。

但问题是在加入上海合作组织之后

代码语言:javascript
复制
    audioManager.startBluetoothSco()
    audioManager.isBluetoothScoOn = true

一旦我点击耳机按钮,我就能听到一个声音,通常是当我接受电话时,所以我假设某些android系统组件会捕捉到这个信号,并且不会再抛出它。

我已经尝试过的:

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

代码语言:javascript
复制
   val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
   phoneStateListener = MyPhoneStateListener()
   tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE)

2) MediaSession +静音噪声+媒体按钮侦听器对第一次单击无效,second+单击处理正确

3) MEDIA_BUTTON接收机不工作

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

那么,无论如何,我怎样才能从蓝牙耳机服务中拦截蓝牙按钮?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-07 08:40:57

Accepting a Call via Bluetooth Headset

把我的答案也加到这里。

这些事件是在HeadsetStateMachine内部处理的(包/应用程序/蓝牙)。

这些事件被转发到IBluetoothHeadsetPhone接口。通过遵循HeadsetStateMachine.java中的绑定代码,在运行时定义所有事件被转发到的单个应用程序。这是为了允许手机制造商将其转发到自定义的电话应用程序,而不是默认的应用程序,在没有使用默认应用程序的情况下。

代码语言:javascript
复制
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应用程序支持这些定制意图,以支持-至少回答一些耳机的呼叫。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51630886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档