Android蓝牙开发(一)蓝牙模块及核心API

蓝牙模块

从蓝牙4.0开始包含两个蓝牙芯片模块:

传统/经典蓝牙模块(Classic Bluetooth,简称BT)和低功耗蓝牙(Bluetooth Low Energy,简称BLE)。

经典蓝牙是在之前的蓝牙1.0,1.2,2.0+EDR,2.1+EDR,3.0+EDR等基础上发展和完善起来的, 而低功耗蓝牙是Nokia的Wibree标准上发展起来的,是完全不同两个标准。

1. 经典蓝牙模块(BT)

泛指蓝牙4.0以下的模块,一般用于数据量比较大的传输,如:语音、音乐、较高数据量传输等。

经典蓝牙模块可再细分为:传统蓝牙模块和高速蓝牙模块。

传统蓝牙模块在2004年推出,主要代表是支持蓝牙2.1协议的模块,在智能手机爆发的时期得到广泛支持。

高速蓝牙模块在2009年推出,速率提高到约24Mbps,是传统蓝牙模块的八倍。

传统蓝牙有3个功率级别:Class1、Class2、Class3,分别支持100m,10m,1m的传输距离。

用途:

  • 传声音

    如蓝牙耳机、蓝牙音箱。蓝牙设计的时候就是为了传声音的,所以是近距离的音频传输的不二选择。现在也有基于WIFI的音频传输方案,例如Airplay等,但是WIFI功耗比蓝牙大很多,设备无法做到便携。因此固定的音响有WIFI的,移动的如耳机、便携音箱清一色都是基于经典蓝牙协议的。

  • 传大量数据

    如某些工控场景,使用Android或Linux主控,外挂蓝牙遥控设备的,可以使用经典蓝牙里的SPP协议,当作一个无线串口使用。速度比BLE传输快多了。这里要注意的是,iPhone没有开放。

2. 低功耗蓝牙模块(BLE)

泛指蓝牙4.0及更高的模块,蓝牙低功耗技术是低成本、短距离、可互操作的鲁棒性无线技术,工作在免许可的2.4GHz ISM射频频段。

因为BLE技术采用非常快速的连接方式,因此平时可以处于“非连接”状态(节省能源),此时链路两端相互间只是知晓对方,只有在必要时才开启链路,然后在尽可能短的时间内关闭链路(每次最多传输20字节)。

低功耗蓝牙无功率级别,一般发送功率在7dBm,一般在空旷距离,达到20m应该是没有问题。

随着蓝牙5.0的发布,其性能有了大幅提升,主要体现在以下几个方面:

  • 高速传输:其传输速率达到了 24Mbps 是蓝牙 4.2LE 的两倍

  • 传输距离:其传输的有效距离是上一版本的 4 倍,理论上,蓝牙发射和接收设备之间的有效工作距离可达 300 米。

  • 精准定位:结合 wifi 可以实现精度小于 1 米的室内定位

  • 超低功耗:蓝牙 5.0 将大大降低了蓝牙的功耗,使人们在使用蓝牙的过程中再也不必担心待机时间短的问题。

用途:

耗电低,数据量小,如遥控类(鼠标、键盘),传感设备(心跳带、血压计、温度传感器、共享单车锁、智能锁、防丢器、室内定位)是目前手机和智能硬件通信的性价比最高的手段,直线距离约50米,一节5号电池能用一年,传输模组成本10块钱,远比WIFI4G等大数据量的通信协议更实用。虽然蓝牙距离近了点,但胜在直连手机,价格超便宜。以室内定位为例,商场每家门店挂个蓝牙beacon,就可以对手机做到精度10米级的室内定位,一个beacon的价格也就几十块钱而已。

3. 双模蓝牙

双模蓝牙指的是既有经典蓝牙也有低功耗蓝牙模块。

如智能电视遥控器、降噪耳机等。很多智能电视配的遥控器带有语音识别,需要用经典蓝牙才能传输声音。而如果做复杂的按键,例如原本键盘表上没有的功能,经典蓝牙的HID按键协议就不行了,得用BLE做私有协议。包括很多降噪耳机上通过APP来调节降噪效果,也是通过BLE来实现的私有通信协议。

Android手机蓝牙4.x都是双模蓝牙(既有经典蓝牙也有低功耗蓝牙),而某些蓝牙设备为了省电是单模(只支持低功耗蓝牙)。

Android蓝牙API简介

1. 经典蓝牙(Classic Bluetooth)

经典蓝牙适用于电池使用强度较大的操作,例如Android之间流式传输和通信等(音频/文件等大数据)。 从Android 4.3(API 18)才有API支持低功耗蓝牙(BLE)。

经典蓝牙API如下:

android.bluetooth

.BluetoothA2dp 音频分发配置文件,高质量音频通过蓝牙连接和流式传输

.BluetoothAdapter 本地蓝牙适配器,是所有蓝牙交互的入口,发现设备,查询配对设备,创建BluetoothServerSocket侦听其他设备

.BluetoothAssignedNumbers

.BluetoothClass 描述蓝牙设备的一般特征和功能,这是一组只读属性,设备类型提示

.BluetoothDevice 远程蓝牙设备,与某个远程设备建立连接,查询设备信息,名称,地址,类和配对状态

.BluetoothHeadset 提供蓝牙耳机支持,以便与手机配合使用,蓝牙耳机和免提配置文件

.BluetoothHealth 控制蓝牙服务的健康设备配置文件代理

.BluetoothHealthAppConfiguration 第三方蓝牙健康应用注册的应用配置,以便与远程蓝牙健康设备通信

.BluetoothHealthCallback 实现 BluetoothHealth 回调的抽象类

.BluetoothManager

.BluetoothProfile 蓝牙配置文件,蓝牙通信的无线接口规范

.BluetoothServerSocket 服务端监听,连接RFCOMM通道(类似TCP ServerSocket)

.BluetoothSocket 建立RFCOMM通道,蓝牙Socket接口(类似TCP Socket),通过InputStream和OutputStream与其他设备传输数据

Android经典蓝牙的开发步骤如下:

  1. 扫描其他蓝牙设备

  2. 查询本地蓝牙适配器的配对蓝牙设备

  3. 建立 RFCOMM 通道 (SPP协议)

  4. 通过服务发现连接到其他设备

  5. 与其他设备进行双向数据传输

  6. 管理多个连接

RFCOMM是蓝牙简单传输协议, 在两个蓝牙设备间的一条物理链上提供多个模拟串口进行传输数据, 可同时保持高达60路的通信连接。

SPP(Serial Port Profile)是通过蓝牙设备之间的串口进行数据传输协议,spp协议处于RFCOMM上层, 如果能使用RFCOMM传输数据,就不需要使用SPP(省去一些流程,速度更快),但还是推荐用SPP,兼容性有保证

2. 低功耗蓝牙(BLE)

从Android 4.3(API 18)才支持低功耗蓝牙(Bluetooth Low Energy,BLE)的核心功能,BLE蓝牙协议是GATT协议, BLE相关类不多, 全都位于android.bluetooth包和android.bluetooth.le包的几个类:

android.bluetooth

.BluetoothGattService 包含多个Characteristic(属性特征值), 含有唯一的UUID作为标识

.BluetoothGattCharacteristic 包含单个值和多个Descriptor, 含有唯一的UUID作为标识

.BluetoothGattDescriptor 对Characteristic进行描述, 含有唯一的UUID作为标识

.BluetoothGatt 客户端相关

.BluetoothGattCallback 客户端连接回调

.BluetoothGattServer 服务端相关

.BluetoothGattServerCallback 服务端连接回调

android.bluetooth.le

.AdvertiseCallback 服务端的广播回调

.AdvertiseData 服务端的广播数据

.AdvertiseSettings 服务端的广播设置

.BluetoothLeAdvertiser 服务端的广播

.BluetoothLeScanner 客户端扫描相关(Android5.0新增)

.ScanCallback 客户端扫描回调

.ScanFilter 客户端扫描过滤

.ScanRecord 客户端扫描结果的广播数据

.ScanResult 客户端扫描结果

.ScanSettings 客户端扫描设置

BLE设备分为两种设备: 客户端(也叫主机/中心设备/Central), 服务端(也叫从机/外围设备/peripheral) 客户端的核心类是 BluetoothGatt

服务端的核心类是 BluetoothGattServer 和 BluetoothLeAdvertiser BLE数据的核心类是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor



作者:几圈年轮
链接:https://www.jianshu.com/p/66e70ecac8ee
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 蓝牙(RSSI)室内定位是一种基于蓝牙信号强度(RSSI)和距离的室内定位技术,可以在室内环境中实现精确的位置跟踪服务。目前,Android平台提供了许多用于蓝牙定位的API和工具,开发人员可以使用这些工具来实现室内定位功能。 在实现蓝牙(RSSI)室内定位之前,需要先进行站点调查和信号质量测试。站点调查可以用于确定信标放置的位置、数量和信号范围等因素。信号质量测试可以确定信标的信号强度和覆盖范围,以便更好的设计和优化蓝牙定位系统。 在Android平台中,可以使用BluetoothAdapter API来扫描周围的蓝牙设备,获取设备的RSSI值和MAC地址等信息。一旦获取了RSSI值,就可以通过算法计算出设备与信标之间的距离和位置信息,并将其显示在用户界面上。具体的算法可以使用基于信号强度指数的方法,例如Path Loss和Trilateration的方法来进行定位计算。 需要注意的是,蓝牙(RSSI)室内定位技术也存在一些挑战和限制。例如,信号强度受环境因素的影响,如环境噪声和干扰等,这可能会导致定位精度不是特别高。此外,室内定位需要多个信标进行多点定位,成本也会相应增加。 总之,在Android开发中,使用蓝牙(RSSI)室内定位技术可以实现室内定位和位置跟踪功能,为商业和社会提供更多可能性。 ### 回答2: 在Android开发中,可以通过蓝牙RSSI(接收信号强度指数)数据实现室内定位。RSSI是指接收到的信号强度,通过测量不同位置的RSSI值,就能够确定设备的位置。 首先需要获取设备的蓝牙信号强度值,这可以通过蓝牙扫描获取。然后建立一个基站位置数据库,将不同位置的蓝牙信号强度值记录下来。当需要定位时,就可以通过比对当前设备的蓝牙信号强度值和基站位置数据库中的信号强度值,来确定设备所处的位置。 室内定位的精度受到多种因素影响,比如墙体厚度、金属物体等会影响信号强度。因此在开发中需要进行精细的调试和优化。同时,蓝牙定位也有一些局限性,如需要用户开启蓝牙蓝牙信号强度值容易受到干扰等。 总之,蓝牙RSSI室内定位是一种比较成熟的技术,在Android开发中也有较多的应用场景,但仍需要开发者进行精细的调试和优化,来提高室内定位的精度和性能。 ### 回答3: 蓝牙RSSI室内定位,是指通过蓝牙信号强度指示(RSSI)来确定物体或设备在室内的具体位置。这种方法适用于室内定位、追踪和导航等场景,但是有其限制:比如,受到干扰等外部环境因素的影响,精准度往往难以达到预期。 对于Android开发来说,实现蓝牙RSSI室内定位需要使用蓝牙模块,并结合相关的定位算法,如三角定位法、指纹定位法等。一般步骤如下: 1.获取蓝牙设备的RSSI值。通过将扫描到的蓝牙设备进行连接,获取其信号强度值。 2.建立基站地图。在室内设定多个基站,获取它们的位置信息,并记录其强度值。 3.计算物体位置。结合已知的基站位置和它们的强度值,使用相关算法计算物体位置及其误差范围。 4.优化算法。如增加基站数量、调整基站位置等,提升室内定位精确度。 Android开发中,需要使用一些相关技术包和类库,如蓝牙适配器、手动操作权限等,较为复杂。值得注意的是,该技术需要有精确的物理地图、较多的基站数量以及较强的数据处理能力,因此在应用中的实际场景时需要谨慎考虑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值