IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android车载蓝牙相关开发4:蓝牙电话操作器BluetoothHeadsetClient -> 正文阅读

[移动开发]Android车载蓝牙相关开发4:蓝牙电话操作器BluetoothHeadsetClient

概述

BluetoothHeadsetClient用于控制HFP客户端(蓝牙电话端)的公共API。简单而言,它是电话的操作代理,可以控制蓝牙HFP协议的连接断开、配置信息的查询、执行HFP协议特有操作等。

初始化

BluetoothHeadsetClient的实例通过BluetoothAdaptergetProfileProxy获取。
示例:

    public void getHFPProxy(Context context){
        BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, new BluetoothProfile.ServiceListener() {
            @Override
            public void onServiceConnected(int profile, BluetoothProfile proxy) {
                BluetoothHeadsetClient bluetoothHeadsetClient = (BluetoothHeadsetClient) proxy;
                //此处拿到的代理实例为BluetoothHeadsetClient。
            }

            @Override
            public void onServiceDisconnected(int profile) {

            }
        },BluetoothProfile.HEADSET_CLIENT);
    }

HFP协议连接与断开

connect方法用于HFP协议连接。
入参为蓝牙设备实例(通过BlueToothAdapter获取)。

目前,系统仅支持一个HFP协议连接。API将在连接之前自动断开已连接的设备。

可通过BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED广播监听连接状态。(关于蓝牙相关广播,后续单独开一篇文章来讲。)

disconnect方法用于HFP协议断开。
入参为蓝牙设备实例(通过BlueToothAdapter获取)。

在蓝牙设备上的配置文件未处于连接状态等情况下,此API将返回false。当此API返回true时,可通过BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED广播监听断开状态。

如果断开连接是由远程设备启动的,则状态变化为STATE_CONNECTED->STATE_DISCONNECTED
如果断开连接是由主机(本地)设备启动的,则状态为STATE_CONNECTED->STATE_DISCONNECTING->STATE_DISCONNECTED

获取配置及状态信息

getConnectedDevices方法:
可以获取连接了HFP协议的当前设备实例

getDevicesMatchingConnectionStates方法:
获取满足连接状态的所有设备列表。
连接状态为BluetoothProfile.STATE_CONNECTINGBluetoothProfile.STATE_DISCONNECTEDBluetoothProfile.STATE_DISCONNECTING中的一种。

getConnectionState方法:
获取当前HFP协议连接状态。状态包括BluetoothPrifile.STATE_CONNECTEDBluetoothPrifile.STATE_CONNECTINGBluetoothPrifile.STATE_DISCONNECTEDBluetoothPrifile.STATE_DISCONNECTING四种。

setPriority方法:
设置权限。入参为需要设置的远端设备实例以及权限能力。
权限为 BluetoothHeadsetClient.PRIORITY_ONBluetoothHeadsetClient.PRIORITY_OFF中的一种。
PRIORITY_ON:可以连接HFP。
PRIORITY_OFF:不可连接HFP。
设备权限可通过getPriority方法获取。

setConnectionPolicy方法:
设置协议连接策略。入参为需设置的设备及连接策略。
连接策略为BluetoothProfile.CONNECTION_POLICY_ALLOWED, BluetoothProfile.CONNECTION_POLICY_FORBIDDEN, BluetoothProfile.CONNECTION_POLICY_UNKNOWN中的一种。
CONNECTION_POLICY_ALLOWED:默认连接HFP
CONNECTION_POLICY_FORBIDDEN:默认不连接HFP
CONNECTION_POLICY_UNKNOWN:连接策略未知(设备没设置或设备未配对)
连接策略可通过getConnectionPolicy方法获取。

HFP协议客户端操作

startVoiceRecognition方法
开启语音识别功能。入参为设备实例。(蓝牙电话用不到)
stopVoiceRecognition为关闭语音识别功能的方法。

sendVendorAtCommand方法
发送供应商特定AT命令。(蓝牙电话用不到)

getCurrentAgEvents方法
获取返回 AG (音频网关)指标的当前值列表。(蓝牙电话用不到)

getCurrentCalls方法
获取当前正在通话的参数实例(封装在BluetoothHeadsetClientCall中)。由于可能存在多路通话,所以此处返回一个List。

acceptCall方法
蓝牙电话端接听电话方法。入参为连接的设备实例与接听时的操作策略标志。
操作策略:
BluetoothHeadsetClient.CALL_ACCEPT_NONE:正常接听(单路通话)
BluetoothHeadsetClient.CALL_ACCEPT_HOLD:应答且挂起(多路通话)
BluetoothHeadsetClient.CALL_ACCEPT_TERMINATE:接听且挂断(多路通话)
通话的状态可以在BluetoothHeadsetClient.ACTION_CALL_CHANGED广播中接收(蓝牙相关广播后面单开一篇讲)。

holdCall方法
挂起当前通话(多路通话使用)。入参为设备实例

rejectCall方法
拒接电话。入参为设备实例。
仅当响铃状态是可拒接。拖已接听,需使用terminateCall方法来挂断电话。

terminateCall方法
挂断电话。入参为设备实例与要挂断的电话参数实例(BluetoothHeadsetClientCall)。
仅当通话时使用该方法有效,若是响铃状态,则应使用rejectCall方法。
电话参数实例传null则为挂断全部进行中的通话。

enterPrivateMode方法
使用指定的呼叫进入私人模式。仅当AG侧支持扩展呼叫控制时才有效。(蓝牙电话通常不用)。

explicitCallTransfer方法
主动执行呼叫转移。连接其他呼叫并断开当前连接。入参为设备实例

dial方法
拨号方法。入参为设备实例以及有效的电话号码。
通话的状态可以在BluetoothHeadsetClient.ACTION_CALL_CHANGED广播中接收(蓝牙相关广播后面单开一篇讲)。

sendDTMF方法
发送DTMF指令的方法(XX业务请按1,YY业务请按2。按下就是发送DTMF指令)。
入参为设备实例以及指令。指令(ASCII码)为0,1,2,3,4,5,6,7,8,9,A,B,C,D,*,# 中的一个。

connectAudio方法
连接音频通道。入参为设备实例。
若音频通道连接,则通话时发声端为蓝牙电话端。若音频通道断开,则通话时发声端为手机端。

disconnectAudio方法
断开音频通道。入参为设备实例。
若音频通道连接,则通话时发声端为蓝牙电话端。若音频通道断开,则通话时发声端为手机端。

结语:

蓝牙电话客户端可以实现电话的基础操作。其中像语音识别、私人模式等功能我并未使用过,如有文中有误,欢迎指正。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:53:18  更:2022-10-08 20:55:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:35:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码