概述

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

初始化

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

    public void getHFPProxy(Context context){BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, new BluetoothProfile.ServiceListener() {@Overridepublic void onServiceConnected(int profile, BluetoothProfile proxy) {BluetoothHeadsetClient bluetoothHeadsetClient = (BluetoothHeadsetClient) proxy;//此处拿到的代理实例为BluetoothHeadsetClient。}@Overridepublic 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方法
断开音频通道。入参为设备实例。
若音频通道连接,则通话时发声端为蓝牙电话端。若音频通道断开,则通话时发声端为手机端。

结语:

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

Android车载蓝牙相关开发4:蓝牙电话操作器BluetoothHeadsetClient相关推荐

  1. Android车载蓝牙相关开发2:蓝牙总入口BluetoothAdapter

    概述 BluetoothAdapter是表示本地设备蓝牙适配器. 它允许我们执行基本的蓝牙任务,如:启动设备发现.查询绑定(配对)设备列表.使用已知MAC地址实例化远端蓝牙设备实例等等. 它基本是所有 ...

  2. 安卓Android下如何开发USB NFC读写器APP

    荣士第二代USB免驱动IC读写器IC-02支持Windows.安卓(Android).Linux系统,为方便IC-02读写器能快速的接入安卓(Android)系统,我们提供了各种安卓版本的So库及示例 ...

  3. android usb读写,安卓(Android)下如何开发USB NFC读写器app

    对安卓工程师来说,在安卓下使用USB设备需要了解很多硬件的内容,这可能会导致工程周期的延长或者app的不稳定.为了将这种风险降到最低,友我科技发布了NFC读写器在安卓下的sdk,使用NFC读写器的类接 ...

  4. Android容器相关开发实践

    首先是源码下载: http://download.csdn.net/download/qq78442761/10224716 运行截图如下: 刚开始运行: 按分数排序后: 长按选中要删除的对象 确定删 ...

  5. 《Android 应用案例开发大全(第二版)》——2.6节绘制相关类

    本节书摘来自异步社区<Android 应用案例开发大全(第二版)>一书中的第2章,第2.6节绘制相关类 ,作者 吴亚峰 , 于复兴 , 杜化美,更多章节内容可以访问云栖社区"异步 ...

  6. Android 音视频开发相关知识

    音视频开发技能 要在Android上进行音视频开发,需要掌握以下技能: Android开发:首先,您需要掌握Android应用程序的基本开发技能,包括Java或Kotlin编程语言,Android S ...

  7. 音视频开发总结之二Android平台相关

    一. 音视频采集流程 串联整个音视频录制流程,完成音视频的采集.编码.封包成 mp4 输出. 通过摄像头和麦克风获得实时的音视频数据: 播放流程: 获取流->解码->播放. 录制播放路程: ...

  8. 关于android相关开发资料的整理

    权限 适配Android6.0动态权限管理 FcPermissions:也许是目前最好的动态权限请求库 Android 开发技巧 - Android 6.0 以上权限大坑和权限检查基类封装 Andro ...

  9. 【Android 逆向】Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )

    文章目录 前言 一.网络初始化操作 二.PC 端工程核心业务逻辑 三.博客资源 前言 本篇博客重点分析 PC 端 hacktool 模块 ; 一.网络初始化操作 HackCommand::Prepar ...

  10. 【Android 高性能音频】高性能音频简介 ( 高性能音频问题引入 | 使用场景 | 相关开发库及技术 )

    文章目录 I 高性能音频使用场景 II 高性能音频开发库 III 相关开发资料 I 高性能音频使用场景 Android 手机的音频问题 : 1. 普通音频功能 : ① 常用音频开发方式 : 当前使用 ...

最新文章

  1. 【洛谷4005】小Y和地铁(搜索)
  2. [LeetCode]29 两数相除和一个小坑点
  3. java 全局唯一id_JAVA生成全局唯一ID 使用 java.util.UUID
  4. 高响应比优先调度算法(HRRN)
  5. Java+高级篇+单核CPU vs 多核CPU
  6. Unity VR开发教程 OpenXR+XR Interaction Toolkit 2.1.1 (四) 传送
  7. 基于redis实现的分布式时间序列存储Roshi
  8. cannot connect to 192.168.137.137:5555: 由于目标计算机积极拒绝,无法连接。
  9. pyflink执行任务问题总结
  10. 虚拟机运行macOS10.15Catalina拓展apfs卷宗(拓展分区)
  11. 如何将电梯门禁卡复制到手机/手环上
  12. 微信玩转开发板-微信控制智能家居简易模型
  13. (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  14. 富士通ERP解决方案举例
  15. upan启动写入usb驱动_为什么创建可启动USB驱动器比创建可启动CD更复杂?
  16. 09含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度
  17. 嵌入式linux驱动之———字符设备驱动(一)
  18. 一步步实现滑动验证码(拼图验证码),Java图片处理关键代码
  19. ESP8266开发笔记5 - printf和ESP_LOGx
  20. (Tekla Structures二次开发)初始化Tekla和二次开发程序之间的连接

热门文章

  1. 衣服尺寸里面A,B是什么意思
  2. 前端常用的一些插件、UI框架、js库,样式库以及官方文档。
  3. oracle嵌套case when,case when 中是否可以在嵌套一个case when ?
  4. 如何使用Excel绘制图表?
  5. iP地址查询、手机号归属地查询
  6. 详解C++中fixed,setprecision(),setw()的用法
  7. Oracle 19c 新特性一览
  8. hibernate的检索策略(抓取策略)
  9. 一键清理系统垃圾.bat文件中的误区,你了解吗?
  10. 超简单的晃咖、小咖秀视频去水印下载方法