Android 蓝牙开发(六)hfp连接

2023-11-06

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/71106622

本文已授权微信公众号 fanfan程序媛 独家发布 扫一扫文章底部的二维码或在微信搜索 fanfan程序媛 即可关注

五一过后,接着研究Android蓝牙hfp相关技术。本文主要内容是蓝牙手机音频的连接、断开流程分析,对应蓝牙HFP profile。
该文章是基于Android源码4.3的


1 hfp简单介绍

HFP (Hands-free Profile),让蓝牙设备(如蓝牙耳机)可以控制电话,如接听、挂断、拒接、语音拨号等,拒接、语音拨号要看蓝牙耳机及电话是否支持。

HFP定义了音频网关(AG)和免提组件(HF)两个角色:
音频网关(AG) – 该设备为音频(特别是手机)的输入/输出网关。
免提组件(HF) – 该设备作为音频网关的远程音频输入/输出机制,并可提供若干遥控功能。


2 手机音频连接

对于手机音频的使用,首先连接的蓝牙设备需要支持hfp协议,并且需要与该设备进行配对,如何进行蓝牙配对这里就不细说了,可以参照我的其他文章。主要分析下其连接过程。
对于系统自带应用Settings中已配对的蓝牙设备界面(如下图所示),
这里写图片描述
其对应文件路径:
packages/apps/Settings/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
点击手机音频进行连接,调用onPreferenceChange。

public boolean onPreferenceChange(Preference preference, Object newValue) {
    if (preference == mDeviceNamePref) { //重命名
        mCachedDevice.setName((String) newValue);
    } else if (preference instanceof CheckBoxPreference) {
  //check box
        LocalBluetoothProfile prof = getProfileOf(preference); //获取对应的profile
        onProfileClicked(prof, (CheckBoxPreference) preference);
        return false;   // checkbox will update from onDeviceAttributesChanged() callback
    } else {
        return false;
    }
    return true;
}

接着看onProfileClicked()函数处理

private void onProfileClicked(LocalBluetoothProfile profile, CheckBoxPreference profilePref) {
    BluetoothDevice device = mCachedDevice.getDevice(); //获取配对的蓝牙设备
    int status = profile.getConnectionStatus(device);  //获取profile的连接状态
    boolean isConnected =
            status == Bluetooth
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 蓝牙开发(六)hfp连接 的相关文章

随机推荐

  • D - Robots Easy Gym - 102267D 搜索+路径记录

    Alice was playing her favorite game Tales of the Abyss while playing she encountered the following puzzle that can be de
  • 疯狂Java讲义笔记汇总

    目录 一 基础类型 二 流程控制与数组 三 面向对象 四 基础类库 五 集合 六 泛型 七 异常 八 数据库 九 注释 十 输入输出 十一 网络 十二 类加载机制 十三 多线程 面向对象三大特性 封装 继承 多态 一 基础类型 char i
  • 增益带宽积(GBWP、GBW、GBP、GB)

    增益带宽积 gain bandwidth product 放大器的增益带宽积是放大器带宽和带宽增益的乘积 1 释义 增益 表示放大器功率放大倍数 以输出功率同输入功率比值的常用对数表示 单位为分贝 dB 带宽 是指在固定的的时间可传输的资料
  • 【C语言进阶】习题练习4

    目录 习题1 习题2 求Sn a aa aaa aaaa aaaaa的前5项之和 其中a是一个数字 习题3 写一个函数打印arr数组的内容 不使用数组下标 使用指针 arr是一个整形一维数组 习题4 求出0 100000之间的所有 水仙花数
  • 查看Oracle数据库sid和用户名

    select name from v database 查看数据库名 select instance name from v instance 查看sid select from dba users 查看数据库里面所有用户 前提是有dba权
  • openGL细分着色器详解

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 细分曲面着色器 1 细分曲面Patch 例子 1 c 主程序 2 片元着色器 3 曲面细分控制着色器 4 曲面细分评估着色器 运行结果 源码下载 前言 术语Tessel
  • 免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

    1 涉及平台 平台管理 商家端 PC端 手机端 买家平台 H5 公众号 小程序 APP端 IOS Android 微服务平台 业务服务 2 核心架构 Spring Cloud Spring Boot Mybatis Redis 3 前端框架
  • java设计模式(二十三)访问者模式

    目录 定义 模式结构 角色职责 代码实现 适用场景 优缺点 定义 访问者模式是一种行为型模式 它允许你定义一个作用于某个对象结构中的各个元素的操作 而同时又不改变这些元素的类 该模式的核心思想是将数据结构与数据操作分离 从而可以在不改变数据
  • IOS_Swift_深入理解闭包 对比懒加载和普通赋值的区别

    定义一个字符串的变量的方法 直接赋值 var str JobDeer 闭包方式 var str String return JobDeer 简化闭包 省略了等号和括号 var str String return JobDeer 闭包中可以定
  • citrix协议ICA技术原理

    转载自 http www zrss com cn article 110 1 html Citrix交付中心解决方案的核心是虚拟化技术 虚拟化计算的核心是ICA协议 ICA协议连接了运行在平台上的应用客户端运行环境和远端终端设备 通过ICA
  • Flutter 单线程模型保证UI运行流畅

    Flutter 框架出色的渲染和交互能力 支撑起这些复杂的能力背后 实际上是基于单线程模型的 Dart 那么 与原生 Android 和 iOS 的多线程机制相比 单线程的 Dart 如何从语言设计层面和代码运行机制上保证 Flutter
  • JUC并发编程之AQS原理

    1 AQS 原理 1 1 概述 全称是 AbstractQueuedSynchronizer 是阻塞式锁和相关的同步器工具的框架 特点 用 state 属性来表示资源的状态 分独占模式和共享模式 子类需要定义如何维护这个生态 控制如何获取锁
  • PCL点云焊点提取

    滚回来更新一篇文章 和各位交流一下 待处理点云 数量级 百万 类型 零部件 描述 弯曲表面上有一些凸起在上面 需要提取凸起和平面接触的一圈点云 作为焊接的加工点 参考 https zhuanlan zhihu com p 32111069
  • Vue监听滚动实现导航栏锚点定位

    父级 div div div div div div div div div 子组件 ul class compreDiagnosisInfoUl li class active li ul div
  • 变分自编码器 (Variational Autoencoders, VAEs)

    Contents Dimensionality reduction PCA and autoencoders Dimensionality reduction Principal components analysis PCA Autoen
  • VMware Workstation克隆虚拟机(CentOS系统)

    问题 VMware Workstation克隆虚拟机 CentOS系统 下面具体说明下 如何在VMware Workstation中克隆一台已有的虚拟机 方法 如下图所示 要克隆名叫 CentOS7 base的一台虚拟 右键该虚拟机选择 管
  • userManager.do不可用问题

    dao层和业务层都可以成功添加 但在页面上调用Servlet显示不可用 原因 userAdd jsp被放到了web的子目录usermanager下面了 所以定位不到servlet资源了 修改 userManager do 成功解决问题
  • 怎么查EI论文的检索号

    论文题目 Study on joint probability density algorithm in multi sensor data fusion 那位热心人帮忙查一下检索号是多少啊 去http www engineeringvil
  • OpenCV调用cv2.imshow显示错误 “The function is not implemented. Rebuild the library with Windows”的解决办法

    在Windows环境下 已经安装了opencv python 读取图片 处理都没有问题 唯独显示就会出错 说 The function is not implemented Rebuild the library with Windows
  • Android 蓝牙开发(六)hfp连接

    转载请注明出处 http blog csdn net vnanyesheshou article details 71106622 本文已授权微信公众号 fanfan程序媛 独家发布 扫一扫文章底部的二维码或在微信搜索 fanfan程序媛