[安卓] 13、安卓蓝牙定位(一)——如何周期性获得蓝牙节点信号强度?
前言
本文将用一个简单的例子介绍如何用安卓手机的蓝牙功能来周期性搜索周边蓝牙节点的信号强度,为有意玩一下蓝牙室内定位的爱好者提供一点小的思路。(如果是想用安卓手机和蓝牙模块通信来实现遥控功能的话,可以参考:http://www.cnblogs.com/zjutlitao/p/4231635.html;想用笔记本和蓝牙模块通信来实现遥控功能的话可以参考:http://www.cnblogs.com/zjutlitao/p/3886826.html;如果是想使用笔记本的蓝牙来做蓝牙定位的话,哈哈,建议放弃...)
效果
定期扫描周边蓝牙设备-->根据信号强度绘制大小不同的圆圈(对于开发人员来说,引入如何搜索到BT信号强度LZ觉得应该很足够啦,然后就可以自由发挥啦)
简介
代码参考:https://github.com/beautifulzzzz/Android/commit/e1d12e756d8e7c9efd9c89fb084c3f100b451427
【成员变量】SurfaceView空间用来绘制动画效果,BluetoothAdapter用来获取蓝牙设备,接下来依次是蓝牙设备信息向量、蓝牙设备信号强弱向量、画笔向量~
【初始化】在onCreate函数中执行初始化相关操作主要有:①画笔初始化;②surfaceview初始化并设置回调函数(因为线程里无法进行界面更新,所以要把消息从线程里发送出来在消息句柄里进行处理,所以我们在37~65行会看到一个消息句柄,用来接收消息并根据消息内容重绘surfaceview)
【启动搜索】该函数供每次触发搜索使用,其中第一次触发位于182行的menuOptions按钮事件中,然后每次在绘制结束后再次调用doDiscovery进行周期性搜索。
【搜索信息并存储】当启动搜索之后,如果一旦搜索到设备就会触发BleetoothDevice.ACTION_FOUND消息,然后将蓝牙设备的名字和MAC地址放进向量保存,信号强度rssi放进RSSI向量保存;当搜索结束后会触发BluetoothAdapter.ACTION_DISCOVERY_FINISHED,在这里表明一个搜索周期结束,通过Bundle发送msg,通知绘图消息句柄,进行绘图。
【绘图消息句柄处理bundle消息并刷新】当上面完成一个搜索周期后会发送bundle消息来触发绘图(如下45~48行),绘图完毕调用doDiscovery再次搜索,如此循环往复。
后记
当大家知道了如何周期性获得周围蓝牙信号强度后,再结合市场上销售的蓝牙节点根据定位技术就能设计出特定应用场景的室内定位了~希望该文对大家有帮助!!!☆⌒(*^-゜)v
相关链接
本文链接:http://www.cnblogs.com/zjutlitao/p/4314096.html
更多精彩:http://www.cnblogs.com/zjutlitao/p/
工程代码:http://pan.baidu.com/s/1mgzcW4o