2024年9月Android 低功耗蓝牙(Ble) 开发总结?Android蓝牙开发——实现蓝牙聊天

 更新时间:2024-09-21 08:48:13

  ⑴Android低功耗蓝牙(Ble)开发总结?Android蓝牙开发——实现蓝牙聊天

  ⑵AndroidAPI提供了以下的几种蓝牙配置文件的实现:、使用配置文件的基本步骤创建HDP应用:关于普通蓝牙设备和普通蓝牙设备之间的连接通信关于蓝牙设备和蓝牙仪器(蓝牙耳机、电子秤等等类似产品这种之间的通信是通过配置文件代理来实现的,协议规定BLE不能连续不断地传输数据包,蓝牙BLE协议规定连接参数最小是,需要一个ConnectThread来发起之后建立连接之后就会调用dataTransfer来进行数据传输,例如Android设备之间的流传输和通信等,使用AndroidBluetoothAPI来完成使用蓝牙进行通信的四项主要任务:设置蓝牙、查找局部区域内的配对设备或可用设备、连接设备,差不多我们的单片机透传到蓝牙模块要多耗时不到ms)而Android发数据可以申请我们设备的mtu来得到最多每次能发多少字节,而跳频过程中的连接是蓝牙基带协议的规定。

  ⑶Android低功耗蓝牙(Ble)开发总结

  ⑷Android从.(APILevel)开始支持低功耗蓝牙,但是只支持作为中心设备(Central模式,这就意味着Android设备只能主动扫描和链接其他外围设备(Peripheral。从Android.(APILevel)开始两种模式都支持。低功耗蓝牙开发算是较偏技术,实际开发中坑是比较多的,网上有很多文章介绍使用和经验总结,但是有些问题答案不好找,甚至有些误导人,比如:获取已经连接的蓝牙,有的是通过反射,一大堆判断,然而并不是对所有手机有用,关于Ble传输速率问题的解决,都是默认Android每次只能发送个字节,然而也并不是,,,下面进入正文。这里用的是Android.新增的扫描API,这里说一下,如果做蓝牙设备管理页面,可能区分是否是已连接的设备,网上又通过反射或其他挺麻烦的操作,也不见得获取到,官方Api就有提供与外围设备交互经常每次发的数据大于mtu的,需要做分包处理,接收数据也要判断数据的完整性最后才返回原数据做处理,所以一般交互最少包含包长度,和包校验码和原数据。当然也可以加包头,指令还有其他完整性校验。下面分享几个公用方法:我自己封装的一个BleUtil,因为涉及跟公司业务关联性太强(主要是传输包的协议不同就先不开源出来了,如果这边文章对大家有帮助反馈不错,我会考虑上传个demo到github供大家使用,在这先给大家推荐一个不错Demo,里面除了没有分包,协议,和传输速率。基本的功能都有,而且调试数据到打印到界面上了。最主要是它可以用两个个手机一个当中心设备一个当外围设备调试。首先传输速率优化有两个方向,外围设备传输到Android。Android传输到外围设备。我在开发中首先先使用上面那位仁兄的demo调试,两个Android设备调试不延时,上一个成功马上下一个,最多一秒发个字节的包。后来和我们的蓝牙设备调试时发现发送特别快,但是数据不完整,他蓝牙模块接收成功了,但是透传数据到芯片处理时发现不完整,我们的硬件小伙伴说因为波特率限制(差不多每字节透传要耗时ms和蓝牙模块的buff(打印时是最多byte,打印的限制,就算蓝牙模块每包都告诉你接收成功,也是没透传完就又接收了。后来通过调试每次发K数据,最后是Android发是字节/ms稳定。给Android发是字节/ms。(天杀的字节,网上都是说字节最多了后来看了国外一家物联网公司总结的Ble吞吐量的文章(上面有连接,知道Android每个延时是可以连续接收个包的。就改为字节/ms(为啥是ms,不是每次间隔要个包吗,怎么像间隔两次,这时因为波特率影响,多了个包字节,差不多我们的单片机透传到蓝牙模块要多耗时不到ms)而Android发数据可以申请我们设备的mtu来得到最多每次能发多少字节。延时还是ms,即:字节/ms提高倍,这个速度还可以。根据蓝牙BLE协议,物理层physicallayer的传输速率是Mbps,相当于每秒K字节。事实上,其只是基准传输速率,协议规定BLE不能连续不断地传输数据包,否则就不能称为低功耗蓝牙了。连续传输自然会带来高功耗。所以,蓝牙的最高传输速率并不由物理层的工作频率决定的。在实际的操作过程中,如果主机连线不断地发送数据包,要么丢包严重要么连接出现异常而断开。在BLE里面,传输速度受其连接参数所影响。连接参数定义如下:连接间隔。蓝牙基带是跳频工作的,主机和从机会商定多长时间进行跳频连接,连接上才能进行数据传输。这个连接和广播状态和连接状态的连接不是一样的意思。主机在从机广播时进行连接是应用层的主动软件行为。而跳频过程中的连接是蓝牙基带协议的规定,完全由硬件控制,对应用层透明。明显,如果这个连接间隔时间越短,那么传输的速度就增大。连接上传完数据后,蓝牙基带即进入休眠状态,保证低功耗。其是.毫秒一个单位。连接延迟。其是为了低功耗考虑,允许从机在跳频过程中不理会主机的跳频指令,继续睡眠一段时间。而主机不能因为从机睡眠而认为其断开连接了。其是.毫秒一个单位。明显,这个数值越小,传输速度也高。蓝牙BLE协议规定连接参数最小是,即.毫秒;而Android手机规定连接参数最小是,即毫秒。iOS规定是,即毫秒。连接参数完全由主机决定,但从机可以发出更新参数申请,主机可以接受也可以拒绝。android手机一部接受,而ios比较严格,拒绝的概率比较高。参考:在iOS和Android上最大化BLE吞吐量最大化BLE吞吐量第部分:使用更大的ATTMTU

  ⑸Android蓝牙开发——实现蓝牙聊天

  ⑹与蓝牙开发主要的相关类是以下四个

  ⑺知道对应API后就可以进行对应的蓝牙开发,这里以获取蓝牙设备为例子

  ⑻搜索设备的回调则需要通过注册广播的形式来获取

  ⑼之后就可以进行个人的一些操作

  ⑽要实现蓝牙聊天则涉及到蓝牙之间的传输通信,前面也说到了,这里肯定就是用到BluetoothServerSocket以及BluetoothSocket。

  ⑾蓝牙传输通信相当于服务器端与客户端之间的通信,只不过不同是这里每一个蓝牙设备本身自己既充当服务器端也充当客户端,大致的关系就是

  ⑿注意,这些连接都是阻塞式的,都要放在线程里去执行。

  ⒀可以看到,当BluetoothServerSocket监听到有设备连接的时候,就会调用dataTransfer开启一个数据传输。

  ⒁需要一个ConnectThread来发起

  ⒂之后建立连接之后就会调用dataTransfer来进行数据传输,同样也需要一个线程来维护数据传输

  ⒃蓝牙聊天则是基于上面三个线程来进行实现,同样,对于蓝牙文件间的传输也是同个道理,通过输入输出流来进行处理。之后的操作就比较容易处理了

  ⒄Android蓝牙开发基本流程

  ⒅Android蓝牙开发(一)

  ⒆普通蓝牙设备官方文档

  ⒇Android平台包含蓝牙网络堆栈支持,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据。应用框架提供了通过AndroidBluetoothAPI访问蓝牙功能的途径。使用BluetoothAPIAndroid应用可以执行下面的操作:

  ⒈传统蓝牙适用于电池使用强度较大的操作,例如Android设备之间的流传输和通信等。针对具有低功耗要求的蓝牙设备,Android.(API中引入了面向低功耗蓝牙的API支持。

  ⒉使用AndroidBluetoothAPI来完成使用蓝牙进行通信的四项主要任务:设置蓝牙、查找局部区域内的配对设备或可用设备、连接设备,以及在设备之间传输数据。

  ⒊关于蓝牙的API在android.bluetooth包中,下面介绍一下和蓝牙相关的主要类:

  ⒋在BluetoothProfileIPC客户端连接到服务(即,运行特定配置文件的内部服务或断开服务连接时向其发送通知的接口。

  ⒌使用蓝牙必须声明权限BLUETOOTH才可以执行蓝牙通信。

  ⒍例如:我们可以查询所有已配对的设备,然后使用ArrayAdapter向用户显示每台设备的名称:

  ⒎要发起连接仅需要知道目标蓝牙设备的Mac地址就可以了。

  ⒏注意执行discovery对于蓝牙适配器来说是一个非常繁重的过程,并且会消耗大量资源。在找到要连接的设备后,要确保使用cancelDiscovery()来停止发现,然后尝试连接。如果您已经和某台设备进行连接,那么这个时候执行发现操作会大幅度的减少此连接可用的带宽!因此不应该在处于连接状态的时候执行发现操作!

  ⒐在连接之前如果两个设备没有配对,则系统会自动发出配对请求。

  ⒑服务器套接字接受连接的基本过程

  ⒒放在子线程中去执行。

  ⒓客户端连接的基本过程

  ⒔调用connect()的时候要确保客户端没有执行发现操作。如果执行了会大幅度降低连接的速度,增加失败的可能。

  ⒕在连接之前调用cancleDiscovery()在进行连接之前应该始终调用这个方法,而且调用的时候无需检测是否正在扫描。

  ⒖从Android.开始,BluetoothAPI便支持使用蓝牙配置文件。蓝牙配置文件是适用于设备间蓝牙通信的无线接口规范。

  ⒗蓝牙配置文件就是设备间通信(蓝牙设备的一种规范

  ⒘免提配置文件便是一个示例,对于连接到无线耳机的手机,两台设备都必须支持免提配置文件。我们也可以通过实现接口BluetoothProfile来写入自己的类来支持特定的蓝牙配置文件。AndroidAPI提供了以下的几种蓝牙配置文件的实现:

  ⒙使用配置文件的基本步骤

  ⒚关于普通蓝牙设备和普通蓝牙设备之间的连接通信

  ⒛关于蓝牙设备和蓝牙仪器(蓝牙耳机、电子秤等等类似产品这种之间的通信是通过配置文件代理来实现的。都有一个对应的配置文件代理类。具体的操作是通过这个对象来完成。

您可能感兴趣的文章:

相关文章