如何利用安卓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调试蓝牙
文章出处:【微信公众号:蓝牙技术联盟】欢迎添加关注!文章转载请注明出处。

如何推动人工智能更好地发展
1P+N与2P漏电开关的区别
高速公路上的太阳能黑科技
开放的生态加速人工智能时代的到来——2017全球人工智能创新峰会Arm分论坛成功召开
儒卓力新型多协议系统级芯片nRF52833介绍
如何利用安卓APP来调试蓝牙
250个各不相同的Shell脚本实例
音响系统的均衡器技术详解
华为麒麟970性能曝光:比肩高通,踏平三星
磁盘阵列的单机磁盘数量
人工智能正在为制造业和其他行业转型升级带来新的活力
2017CES预见汽车未来之黑科技看点
微型伺服电机有什么特点?
新基建浪潮下物联网将会对哪些领域产生影响
2023年智能手表选购指南:如何挑选高端国货品牌前十名排行榜
负氧离子监测系统:卓越的性能和便捷的功能
数码摄像机的图像感光器元件
关于边缘计算技术的市场现状与发展趋势
AEye的iDar传感器第一款在硬件层面上结合激光雷达和相机数据的产品
显存是什么