如何利用安卓APP来调试蓝牙

描述

随着物联网和互联设备市场的快速增长,Google Play中也出现了越来越多采用蓝牙(Bluetooth)的创新应用。越来越多的团队也开始加入创建安卓蓝牙应用的大军,对于开发者来说,有关蓝牙协议栈和API的一些基础知识至关重要,今天小编就带大家一探究竟!

了解SDK 和协议栈(Stack)

只需要几行调用高级API的代码,你就能通过蓝牙迅速扫描并连接目标设备。若想了解如何在APP中采用低功耗蓝牙技术,或只是想创建样板文件框架代码,都可以点击访问应用加速器套件(App Accelerator Kit)页面。

要想让APP的性能更上一层楼,很有必要先了解一下安卓开发中的蓝牙API。自从安卓4.3版本(JELLY_BEAN_MR2API Level: 18)中引入了低功耗蓝牙技术(BluetoothLow EnergyTechnology)的特性以来,面向安卓的SDK和蓝牙协议栈就在不断演进。

从安卓5.0开始(APILevel: 21),添加了新的android.bluetooth.le数据包。对于有些蓝牙操作,可能有多种实现方式。因此,你需要确认用户操作系统版本和API等级,以更好地了解蓝牙SDK的功能。

不同手机上的蓝牙功能和特性也有可能不同。以BluetoothLeAdvertiser类为例,并不是所有的手机都支持”HAL-enabledfeatures”特性,开发者需要特别调用函数BluetoothAdapter.isMultipleAdvertisementSupported(),以确认其在当前设备上是否支持。

在开发者选项中,可以使能蓝牙HCI日志,这是一个非常有用的工具--“HCI信息收集日志(HCI snoop log)”(4.4以上版本)。


它在协议栈中就像个钩子,能够捕捉到所有的HCI数据包并将其写入到一个文件当中。大部分安卓设备的日志文件位于/sdcard/btsnoop_hci.log。可以通过这篇文章详细了解如何设置工具并检索信息。 

同时,第三方的调试工具,例如北欧半导体(Nordic     Semiconductor)提供的一款面向安卓的工具--“nRF Master Control Panel”,其与在iOS使用的“LightBlue”非常类似。这款APP能作为GAP/GATT客户端为开发者获取很多信息。它还能模拟安卓GATT服务器。更强的是,它还能显示通信范围内广播的实时RSSI图形。这一工具可在Google Play中获取。


了解连接间隔(Connection Interval)

蓝牙连接间隔是APP的一组重要参数。为了平衡功耗和性能,你需要针对特定用例进行参数微调。

在 GAP (通用访问配置文件)层,外围设备发出广播,中央设备来接收。然后中央设备发起连接,外围设备接受连接请求。当中央设备发起蓝牙连接时,会发出包含一系列连接参数的连接请求(connect_req)。

连接间隔(Connection interval)

从设备延迟(Slavelatency)

管理超时(Managementtimeout)

在初始请求中,连接间隔应设为initial_conn-interval,从设备延迟为零。安卓设备上的initial_conn_interval (连接建立时的连接间歇初始值)设置为7.5ms,这是规格所允许的最小值。在 7.5ms的间隔下,我们能够获取最高的吞吐量,但这也非常耗电(越小的间隔意味着越频繁的连接事件,进而传输更多数据,相应地就会造成更高功耗)。当连接建立、中央设备端的发起连接活动完成后,中央设备或外围设备就能发出连接参数更新的请求。这一请求是希望对方设备采纳的参数建议。对方接受建议之后,中央设备就会开始进行连接参数更新过程。安卓的这一过程是在BluetoothGatt类中实施的。需调用requestConnectionPriority方法更新连接参数。目前在API Level23中,更新方法支持三组参数:

CONNECTION_PRIORITY_BALANCED

CONNECTION_PRIORITY_HIGH

CONNECTION_PRIORITY_LOW

进程如下:


目标设备也可能会向安卓发送连接参数更新请求,希望按照自己的偏好改变间隔。但间隔设定的最终决定权还是在主设备(在链路层发起连接的设备)。

了解数据包(Packet)和流程(Procedure)

蓝牙开发可用的另一个强有力的工具就是协议分析器(protocol analyzer),也就是嗅探器(the sniffer)。本文中我用的是ComProbe BPA低功耗蓝牙协议分析器,通过它我可以轻松地了解无线通讯情况或判断问题所在。

当我不确定安卓协议栈和API传递的数据是否正确时,就会启动分析器,检查不同层的细节。下面的截图就显示了 “Read by type”运行的细节。我还可以转到 “Handle value pair”,针对其逐步进行调试。


调试隐藏活动(Invisible Activity)或后台服务(Background Service)

APP不会一直在前台运行。任何更高优先级的任务都可能将你的蓝牙应用转变为不可见模式。有时蓝牙运行的实施是在后台的服务中。多数情况下,蓝牙不在前台时,运行可能会有所不同。在后台或服务中的运行场景需经过测试和认证。几乎所有的安卓调试器都支持一项特性,那就是附加至某一特定进程。你只需要找到APP的进程ID,将调试器附加到这一特定进程即可。


自从安卓开始支持低功耗蓝牙以来,每一次版本更新都包括了蓝牙协议栈和API的改进。再加上易于开发者采用的API和工具,安卓正逐渐成为物联网生态系统中最强有力的平台。期待不久的将来能够看到更多创新的安卓应用。

本篇作者为:蓝牙技术联盟技术项目经理 高文森先生

原文标题:如何利用安卓APP调试蓝牙

文章出处:【微信公众号:蓝牙技术联盟】欢迎添加关注!文章转载请注明出处。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分