随着物联网和互联设备市场的快速增长,Google Play中也出现了越来越多采用蓝牙(Bluetooth)的创新应用。越来越多的团队也开始加入创建安卓蓝牙应用的大军,对于开发者来说,有关蓝牙协议栈和API的一些基础知识至关重要,今天小编就带大家一探究竟!
只需要几行调用高级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调试蓝牙
文章出处:【微信公众号:蓝牙技术联盟】欢迎添加关注!文章转载请注明出处。
-
蓝牙
+关注
关注
114文章
5804浏览量
170150 -
安卓
+关注
关注
5文章
2125浏览量
57135
发布评论请先 登录
相关推荐
评论