蓝牙防丢profile
1.TXP(txpower) Characteristic, 设备端需要通过主机控制接口HCI来获得发射功率参数,并以read属性提供给master。

2.IAS(immediate alter service), write属性,供master写告警级别。当master写入新的值时,设备端会收到write的回调,其根据告警级别进行相应告警。

  1. LLS(link loss service),write/read属性,供master设置链路断开情况下默认的告警级别。

RSSI通过接收端的接口来获得,并不需要设备端提供service。

以上Characteristic都通过GATT profile提供服务,在蓝牙通信协议上,每个Characteristic都会对应一个UUID。

android蓝牙BLE接口编程
androidBLE接口在android4.3版本以上提供。

  1. 判断当前系统是否支持BLE

getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)

返回真表示支持。

  1. 获得蓝牙适配器类

用户通过统一的蓝牙适配器类BluetoothAdapter来使用BLE API。

先获得蓝牙管理器:

BluetoothManagerbluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE);

再获得蓝牙适配器实例(单体对象):

BluetoothAdaptermBluetoothAdapter = bluetoothManager.getAdapter();

  1. 启动手机蓝牙硬件功能(相当于在设置界面开启蓝牙功能)

mBluetoothAdapter.enable();

  1. 开始扫描

BluetoothAdapter.startLeScan(android.bluetooth.BluetoothAdapter.LeScanCallbackcallback)

callback是当扫描到蓝牙设备时的回调接口。实现callback中的onLeScan接口:

@Override

public void onLeScan(finalBluetoothDevice device, int rssi, byte[] scanRecord)

其中,device代表扫描到的设备,可以获得其MAC地址、设备名等等;rssi即信号强度,这是未连接时获取RSSI的方法;scanRecord代表扫描设备得到的响应参数,ibeacon即通过该参数来获得广播内容。

假设String bluetoothAddress = device.getAddress(),获取蓝牙48位MAC地址

  1. 连接GATT,获取设备端的UUID服务,并进行数据通信交互

通过MAC地址获得代表设备端的蓝牙设备类

BluetoothDevicedevice = mBluetoothAdapter.getRemoteDevice(bluetoothAddress);

连接GATT

BluetoothGatt mBluetoothGatt = device.connectGatt(android.content.Context context, booleanautoConnect, android.bluetooth.BluetoothGattCallback callback);

Callback是连接GATT之后,所有数据交互的回调入口。分别包括:

1)设备服务发现

@Override

publicvoid onServicesDiscovered(BluetoothGatt gatt, int status)

mBluetoothGatt.getServices()代表设备服务集合,

for (BluetoothGattService gattService : mBluetoothGatt.getServices())

对于每个服务service,用getUuid()可以获得服务的UUID,getCharacteristics()代表该服务的Characteristic集合。

for(BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics)

对于每个Characteristic,getUuid()获得UUID,getPermissions()获得属性权限,getValue()获得属性值。

在该回调中我们只提取感兴趣的三个Characteristic的UUID,对于其他的如电池、设备服务等UUID可以不管。

gattCharacteristic_char5_TXP=gattCharacteristic;

2)连接状态改变

@Override

public voidonConnectionStateChange(BluetoothGatt gatt, int status,intnewState)

有两种状态,BluetoothProfile.STATE_CONNECTED代表连接,BluetoothProfile.STATE_DISCONNECTED代表断开连接。

3)读回调

@Override

public voidonCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristiccharacteristic, intstatus)

其对应手机端发出读请求后,当收到设备端的数据时的回调。如

mBluetoothGatt.readCharacteristic(gattCharacteristic_char5_TXP)

4)设备端数据变化回调

这里对应设备的characteristic的属性是notify或者indication,即相当手机端订阅这个characteristic的值变更服务,当设备端的characteristic发生变化时,设备端会主动发出通知给手机端。

@Override

public voidonCharacteristicChanged(BluetoothGatt gatt,

BluetoothGattCharacteristiccharacteristic)

在回调中获得新的值characteristic.getValue()。

5)获取到RSSI值的回调

RSSI在扫描时可以通过扫描回调接口获得,但是在连接之后要不断地使用

mBluetoothGatt.readRemoteRssi()向底层驱动发出读取RSSI请求,当底层获取到新的RSSI后会进行以下回调:

@Override

public voidonReadRemoteRssi(BluetoothGatt gatt, int rssi, int status)

rssi即是新的信号强度值。

连接后,由于手机和设备端的距离在发生变化,因此要不断地读取RSSI,实时计算两者之间的距离才能保证防丢功能的实现。

蓝牙防丢器实现安卓的BLE接口编程相关推荐

  1. mac 更换默认蓝牙适配器_蓝牙防丢器实现安卓的BLE接口编程

    蓝牙防丢profile 1.TXP(txpower) Characteristic, 设备端需要通过主机控制接口HCI来获得发射功率参数,并以read属性提供给master. 2.IAS(immedi ...

  2. android防丢器设计,蓝牙防丢器 安卓代码和附带说明

    [实例简介] 蓝牙防丢器 安卓代码和附带说明,缺失了蓝牙4.0的嵌入代码. [实例截图] [核心代码] 蓝牙防丢器代码 ├── 代码 │   └── first_test │   ├── Androi ...

  3. 蓝牙防丢器原理、实现与Android BLE接口编程

    本文是对已实现的蓝牙防丢器项目的总结,阐述蓝牙防丢器的原理.实现与Android客户端的蓝牙BLE接口编程.在这里重点关注如何利用BLE接口来进行工程实现,对于BLE的协议.涉及到JNI的BLE接口内 ...

  4. [yueqian_scut]蓝牙防丢器原理、实现与Android BLE接口编程

    本文是对已实现的蓝牙防丢器项目的总结,阐述蓝牙防丢器的原理.实现与Android客户端的蓝牙BLE接口编程.在这里重点关注如何利用BLE接口来进行工程实现,对于BLE的协议.涉及到JNI的BLE接口内 ...

  5. 苹果更新“查找”APP,三星发布新款SmartTag Plus,蓝牙防丢器市场暴增

    苹果更新"查找"APP,三星发布新款SmartTag Plus,蓝牙防丢器市场暴增 苹果宣布推出更新的「查找」app,允许第三方产品透过私密且安全的苹果「查找」网络来查找,该网络由 ...

  6. [智能硬件] 1、三分钟看懂智能硬件原理——蓝牙防丢器制作教程(包括手机应用)...

    1 什么是智能蓝牙防丢器 所谓智能蓝牙(Smart Bluetooth)防丢器,是采用蓝牙技术专门为智能手机设计的防丢器.其工作原理主要是通过距离变化来判断物品是否还控制在你的安全范围.主要适用于手机 ...

  7. 解密蓝牙防丢器工作原理,让您避免遗失物品

    蓝牙防丢器的起源 "我的钥匙在哪儿?""我的钱包又到哪去了?""我的手机放哪了?快打一下我的电话."随意放东西容易,找东西却难上加难,想必在 ...

  8. 196、基于51单片机无线蓝牙防丢器无线寻物报警器手机防丢失APP搜寻设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘 要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.程序源码 七.资料包括 摘 要 在现实生活中,大多数人都曾有过丢失贵重 ...

  9. 智能蓝牙防丢器(Airtag)

    蓝牙防丢器,是采用蓝牙技术专门为苹果手机设计的防丢器.其工作原理主要是通过距离变化来判断物品是否还控制在你的安全范围.主要适用于手机.钱包.钥匙.行李等贵重物品的防丢,也可用于防止儿童或宠物的走失.防 ...

最新文章

  1. http://www.fx114.net/qa-24-116329.aspx
  2. 网络IO发展历程:BIO、NIO、多路复用器、epoll
  3. 使用console.table()调试javascript
  4. 微软商业智能和分析平台高歌猛进,一骑绝尘,成为当之无愧BI分析平台的领导者
  5. 初学WEB前端的建议,你不看给别人可惜了!
  6. Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建
  7. 数据库关系代数表达式
  8. IBAN和SWIFT代码有什么不同?
  9. 北京中波(AM-MW)无线广播发射频率/频道表 (转载)
  10. xhEditor使用方法1
  11. matlab冲激函数的傅里叶变换,利用MATLAB对正弦,矩形脉冲函数进行傅里叶变换
  12. 国美易卡监控系统维护,国美易卡功能多
  13. 电影《五十度灰》主题曲《Love me like you do》——尽你所能爱我Ellie Goulding(埃利·高登)——【英文小清新歌曲推荐】
  14. Visual paradigm试用版绘制ER图时如何去水印
  15. python装饰器抽丝拨茧
  16. 浅入浅出 1.7和1.8的 HashMap
  17. MATLAB~~~描绘散点图函数scatter
  18. MySQL常见错误码
  19. java基础-day08-面向对象(三) this关键字、继承、static关键字
  20. 洛谷 P1240 诸侯安置

热门文章

  1. ansible 做服务器互信
  2. 人工智能课程怎么学?
  3. 常用IDE快捷键整理
  4. echart 页面跳转_echarts3地图实现点击某省市区域跳转到相应页面
  5. 三国志战略版:Daniel_S2司马盾阵容分析
  6. 1 nrf51822简介
  7. 前后端分离 -- 深入浅出 Spring Boot + Vue + ElementUI 实现相册管理系统【文件上传 分页 】 文件上传也不过如此~
  8. 行为皆数据 门店即服务——首次揭秘阿里的无人店系统
  9. (一)Graphvite源码编译安装——faiss 源码安装
  10. 基于stm32的智能宠物喂食器