
Bluetooth
文章平均质量分 84
天花板之恋
在coding的路上
展开
-
Android单独打开和关闭BLE
1.常规操作经典蓝牙最近有一个功能需要使用蓝牙BLE,如果在使用之前蓝牙是关闭的状态,需要先打开蓝牙,并且在使用完之后,需要把蓝牙关闭。我们的功能是在后台服务执行,最开始使用常规的方式判断并打开蓝牙:boolean isEnableBefor = bluetoothAdapter.isEnabled(); //判断蓝牙是否打开if (!isEnableBefor) { bluetoothAdapter.enable(); //使用常规方式打开蓝牙 }这原创 2021-12-02 15:16:50 · 4695 阅读 · 0 评论 -
Android HeadSetClient端通话的传递
Android源代码中,如果通话状态有改变,会沿着这样的顺序传递:蓝牙chip >> HCI接口 >> BlueDroid协议栈 >> Bluetooth >> 广播传递 >> Telecom ,下面重点介绍一下数据在Bluetooth内的传递过程:通话状态有改变,会通过NativeInterface这个类里面的onCallSetup方法回调通知:public class NativeInterface { ......... p原创 2021-09-24 14:59:22 · 1669 阅读 · 0 评论 -
Bluetooth HFP连接过程分析
class BluetoothService extends SystemService {private BluetoothManagerService mBluetoothManagerService;public BluetoothService(Context context) { super(context); mBluetoothManagerService = new BluetoothManagerService(context);} public void on原创 2021-04-07 11:48:41 · 2912 阅读 · 0 评论 -
Android HeadSet端的通话建立过程
蓝牙的HFP协议定义了两个角色,一个是HF端,如蓝牙耳机、车机端等免提设备;一个是AG端,通常指的就是手机端。在Android系统里面,也有对应的两个Profile,HF端对应HeadsetClient Profile,而AG端对应Headset Profile。下面我们就通过拨号指令,梳理Headset端的处理过程。首先来看一下整体的流程图:1.首先拨号的指令在HF端发出,经过两端蓝牙chip的信号传递,到达AG侧的协议栈中,在协议栈经过解析之后,已经明确了此为一个拨号的请求,于是就会通过JNI层原创 2021-09-22 14:50:23 · 1667 阅读 · 0 评论 -
BluetoothHeadSetClient的framework修改
1.概述:BluetoothHeadSetClient是Android系统中对于HFP协议HF端的定义,HFP协议AG端则是BluetoothHeadSet相关的定义。通常情况下,手机对应的是AG端;而类似于车机、蓝牙耳机等设备,对应的是HF端。Android原生的SDK是针对手机开发的,所以会发现在原生API中找不到BluetoothHeadSetClient相关的定义,这个时候我们就要去源码一探究竟了。2.修改源码可以看到源码中对BluetoothHeadSetClient是做了隐藏的:(an原创 2021-08-04 14:55:29 · 1478 阅读 · 2 评论 -
Android系统开启蓝牙源码分析(下)
上篇博客我总结了Android打开蓝牙分为4个阶段,第一阶段就是打开蓝牙的方法从APP调到systemServer再到Bluetooth协议栈,最后走到了hardware蓝牙硬件设备。如下图绿色虚线的流程:经过了硬件的一些列操作,正真打开了蓝牙设备,下面继续分析。第二阶段:(对应图中蓝色虚线流程)在蓝牙打开成功之后,JNI层会通过JniCallbacks的stateChangeCallback方法把消息回调给AdapterService处理,AdapterService则继续把消息给到状态机处理:原创 2021-07-23 20:11:45 · 2166 阅读 · 3 评论 -
Android系统开启蓝牙源码分析(上)
Android系统的蓝牙打开过程,涉及到APP应用层、framework框架层和Bluetooth协议栈层,总体的流程图可以参考如下:可以看到,开启的流程大致分为4个阶段:第一阶段: (对应图中绿色虚线流程)应用软件调用BluetoothAdapter的enable()方法,通过Binder远程调用到BluetoothManagerService里面对应的enable方法:@RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN) pu原创 2021-07-23 15:23:09 · 2979 阅读 · 2 评论 -
Android BLE开发实战和总结
最近项目中需要使用到BLE通信,用来实现车机端和另外一个设备的信息交互(称为从设备)。在做了一番了解之后发现,Android对于BLE的封装已经很到位了,使得BLE的功能相对于整个Android蓝牙来说就是一个Profile,使用起来已经很方便。一、基本概念:1.概述BLE全称为Bluetooth Low Energy,低功耗蓝牙技术,用以解决传统蓝牙(BR)功耗过高的问题。其中定义了两个角色,一个是主设备(Master),如手机、车机等处理能力较强的设备;一个是从设备(Slave),通常是智能手环、原创 2021-09-09 17:54:28 · 2102 阅读 · 0 评论