0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

蓝牙技术联盟 来源:xx 2019-08-10 09:08 次阅读

随着物联网和互联设备市场的快速增长,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调试蓝牙

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

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

    关注

    112

    文章

    5430

    浏览量

    165664
  • 安卓
    +关注

    关注

    5

    文章

    2081

    浏览量

    54518
收藏 人收藏

    评论

    相关推荐

    手机的蓝牙

    手机的蓝牙与外部透明串口蓝牙怎么不能连接识别啊。 有的说三星手机的可以识别,那其他的手机就不能吗? 有的说蓝牙协议不支持,到底是升级串口
    发表于 09-02 17:01

    蓝牙4.1】app安装失败

    ` 本帖最后由 770781327 于 2015-6-30 21:28 编辑 大家有没有用到手机端的app呢,我是手机,官网提供的这app貌似无法安装呀,我都换了四家的
    发表于 06-30 21:27

    求教一个问题,stm32,手机,蓝牙串口

    如果手机通过蓝牙串口发送数据给32,可以通过中断,如果32通过蓝牙发送数据给手机,应该怎样做??难道在APP里写一个不断接受数据流的语句
    发表于 07-16 14:46

    求教,stm32,手机,蓝牙串口

    如果手机通过蓝牙串口发送数据给32,可以通过中断,如果32通过蓝牙发送数据给手机,应该怎样做??难道在APP里写一个不断接受数据流的语句
    发表于 07-17 13:38

    蓝牙4.1】+ cysmart版APK _第八季

    本帖最后由 416780286 于 2015-7-22 00:04 编辑 【蓝牙4.1】+ cysmart版APK _第八季前言:就像物理界的名言“物理大厦全部建成,今后物理学家只是修饰
    发表于 07-22 00:02

    【云智易试用体验】APP demo编译与运行

    的XLINK_SDK_Android_Demo.zip解压),导入后如上图,发现有几个错误。然后点工程的属性,选择一下的SDK,我这里是4.3.0, 勾选后错误消失。下面打开
    发表于 09-05 21:59

    【Thunderboard Sense试用体验】机安装APP

    对于手机用户来说,下载Thunderboard APP需要去Google play下载,官网并不提供安装包和下载链接。而大陆又有限制,这困扰了一大批的用户。下面我来讲述一下自己使用
    发表于 06-24 23:51

    【有奖体验】+APP自动生成源码

    【有奖体验】+APP自动生成源码大佬们都在使用开发板上的自动代码生成,有MCU的、有SOC的,都试过了,那么我就试个APP的吧。可惜的是个人没有相关的开发板,看了下开发中心,总之是
    发表于 07-09 16:50

    手机APP通过蓝牙不能连接上stm32中的单片机中的蓝牙模块

    手机APP通过蓝牙连接不上stm32单片机中的蓝牙模块,之前是自己写的APP发现连接不上,后
    发表于 04-27 22:58

    蓝牙模块调试连不上电脑

    最近在做蓝牙模块的测试,用的是SIM800C,淘宝买的模块。使用串口配置没有问题,但是蓝牙功能还没调试。电脑有蓝牙功能,但是直接连模块发现连不上。苹果的商店里没找到
    发表于 04-29 23:13

    请问在平台下TI有没有提供OAD调试工具?

    请教。在平台下TI有没有提供OAD调试工具?目前情况是,我们自己做了一个蓝牙板,板上OAD已经调试完毕可以升级,手机端支持IOS和
    发表于 09-27 12:58

    如何用AltBeaconAPI开发Beacon原型APP

    如何用AltBeaconAPI开发Beacon原型APP
    发表于 05-21 06:32

    手机与蓝牙模块联合调试—— 单片机蓝牙控制LED灯亮灭(上)

    系列博文:(1)手机与蓝牙模块联合调试(一)——蓝牙模块的串口通讯 (2)
    发表于 07-01 07:36

    如何通过模拟器实现APP控制小车?

    如何通过模拟器实现APP控制小车?
    发表于 01-19 06:29

    如何利用App inventor编写app控制ESP8266?

    如何利用App inventor编写app控制ESP8266?
    发表于 02-11 07:04