经典蓝牙的配置文件攻略

经典蓝牙的配置文件攻略

1. 介绍

这里讲讲经典蓝牙的规范使用,平时我们使用蓝牙电话、语音、文件传输等等都是建立在蓝牙技术联盟,一个以制定蓝牙规范,与推动蓝牙技术为宗旨的跨国组织,所建立的规范中使用的,根据谷歌的基本api文档启动蓝牙,根据不同的需求建立相应的协议连接就ok啦!

2. 源码结构 (API 22)


如果想了解具体的蓝牙源码,可以到以下标记的源码位置去一探究竟:
- 蓝牙协议所在:/packages/apps/Bluetooth/src/com/android/bluetooth/

  • 蓝牙设置所在:/packages/apps/Settings/src/com/android/settings/bluetooth
  • 电话管理所在: /packages/services/Telecomm/src/com/android/server/telecom/
    • 基本流程:settings界面发起,LocalBluetoothAdapter.java过渡,去framework的(BluetoothAdapter.java)转消息后回到packages的AdapterService.java,再走JNI来的external控制蓝牙

3. 蓝牙协议解释

  • Headset profile 提供了移动电话上的Bluetooth耳机支持。Android提供了BluetoothHeadset类,它是一个协议,用来通过IPC(interprocess communication)控制Bluetooth Headset Service。BluetoothHeadset既包含Bluetooth
    Headset profile也包含Hands-Free profile,还包括对AT命令的支持。
  • HFP (Hands-free Profile),免提模式,让蓝牙设备可以控制电话,如接听、挂断、拒接、语音拨号等,拒接、语音拨号要视蓝牙耳机及电话是否支持。
  • HDP(Health Device Profile.),蓝牙医疗设备模式,可以创建支持蓝牙的医疗设备,使用蓝牙通信的应用,例如心率监视器,血液,温度计和秤。
  • AVRCP,音频/视频远程控制配置文件,是用来听歌时暂停,上下歌曲选择的。
  • A2DP(Advanced Audio Distribution Profile),高级音频传输模式。Android提供了BluetoothA2dp类,这是一个通过IPC来控制Bluetooth A2DP的协议。
  • HID (The Human Interface Device),人机交互接口,蓝牙鼠标键盘什么的就是这个了。该协议改编自USB HID Protocol。
  • OPP (Object Push Profile),对象存储规范,最为常见的,文件的传输都是使用此协议。
  • PAN (Personal Area Network),描述了两个或更多个蓝牙设备如何构成一个即时网络,和网络有关还有串行端口功能(SPP),拨号网络功能(DUN)。
  • PBAP (Phonebook Access Profile),电话号码簿访问协议。

4. 实际操作

演示一下蓝牙电话Headset profile

  • 首先添加权限
    <manifest ... >
      <uses-permission android:name="android.permission.BLUETOOTH" />
      <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
      ...
    </manifest>
  • 启动蓝牙
    val mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
    mBluetoothAdapter.enable()
  • 设置蓝牙协议监听器,按照蓝牙协议连接连接打开或断开的时候会走该回调,成功会建立一个协议的句柄,用以控制协议所规定的功能。
    var mServiceListener: BluetoothProfile.ServiceListener = object : BluetoothProfile.ServiceListener {

        override fun onServiceDisconnected(profile: Int) {
            Log.d("just2lab","profile onServiceDisconnected:$profile")
            if (profile == getHFPProfileIndex()) {
                mBluetoothHeadset = null
            }
        }

        override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) {
            Log.d("just2lab","profile onServiceConnected:$profile,$proxy")
            if (profile == getHFPProfileIndex()) {
                mBluetoothHeadset = proxy
                L.d("proxy: $profile,mheadset:$mBluetoothHeadset")
            }
        }
    }
  • 开始建立协议,启动协议监听器的回调。如此就可以使用mBluetoothHeadset的各种功能了
    mBluetoothAdapter.getProfileProxy(context, mServiceListener, getHFPProfileIndex())
  • 注意大多数时候回调的协议句柄可能是隐藏类,这时可以考虑反射调用了。
  • 最后别忘了关闭协议
    mBluetoothAdapter.closeProfileProxy(mBluetoothHeadset)

5. BluetoothHeadsetClient的常用方法(反射/拷贝类)

  • connect 连接设备
  • disconnect 断开连接
  • getAudioState 获取音频连接状态
  • connectAudio 连接音频
  • disconnectAudio 断开音频
  • dial 拨号
  • acceptCall 接听
  • rejectCall 拒接
  • terminateCall 结束通话
  • sendDTMF DTMF(Dual Tone Multi Frequency),双音多频,发送给被叫号码的用户信号,就是我们经常使用的“按1,xxx;按2,xxx…”

6. 一些事件广播的监听

  • BluetoothAdapter.ACTION_STATE_CHANGED:监听蓝牙打开与否的状态
  • BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED:监听蓝牙设备连接状态
  • BluetoothDevice.ACTION_PAIRING_REQUEST :监听蓝牙设备配对请求,可以设置自动配对等等
  • BluetoothDevice.ACTION_BOND_STATE_CHANGED:监听蓝牙设备绑定状态
  • “android.bluetooth.headsetclient.profile.action.AG_CALL_CHANGED” :监听蓝牙电话状态,隐藏类,使用字符串比较方便。
### Linux 蓝牙 Configuration 文件路径及设置方法 #### 配置文件位置 在标准的 Linux 发行版中,蓝牙配置文件通常位于 `/etc` 目录下。对于非交叉编译环境,这些配置文件会被安装到系统的根目录下的相应子目录中[^3]。 - **BlueZ 主配置文件**: 一般存放在 `/etc/bluetooth/main.conf` 中。 - **D-Bus 配置文件**: 对于 D-Bus 的特定服务配置,如蓝牙服务,则可能存在于 `/etc/dbus-1/system.d/bluetooth.conf` 这样的路径里。 当涉及到嵌入式设备或 ARM 架构上的 Linux 系统时,如果进行了交叉编译,并指定了 `--prefix=$(PATH)` 参数,在这种情况下,原本应放置于根目录中的配置将会被重定向至指定的目标输出路径之下,即变为 `$(PATH)/etc` 和 `$(PATH)/var`。 #### 设置方法 为了正确地配置 Bluetooth 设备和服务: 1. 修改 BlueZ 的主要配置文件 (`main.conf`) 来调整全局行为,比如名称、可见性等属性; 2. 如果需要自定义 D-Bus 接口权限或其他高级选项,可以通过编辑对应的 XML 格式的 D-Bus 配置文件来实现; 3. 当遇到初始化失败的情况,例如错误提示 "Failed to access management interface" 或者 "Adapter handling initialization failed"[^4],这可能是由于内核未开启对蓝牙的支持或是缺少必要的驱动模块。此时应当检查并重新编译带有适当蓝牙功能选项启用的新 uImage 映像文件。 ```bash # 复制默认配置作为起点 (假设已进入目标输出路径) cp -r /usr/share/doc/bluez/examples/* ./etc/bluetooth/ ``` 通过上述命令可以从蓝芽软件包自带的例子复制一份初始配置模板用于进一步定制化修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值