Android 开发中 iBeacon的使用

Android IBeacon iBeacon的工作原理是基于Android的低功耗蓝牙BLE,和蓝牙不同的是iBeacon不用配对和连接过程,iBeacon基站通过BLE蓝牙的广播频道不断向外发送位置信息,当智能设备进入设定区域时,不需要连接就能够收到信号,只要满足iBeacon技术标准的都可以使用。IBeacon可以通过rssi来判断设备与基站的距离,用于室内的定位。 一、IBeacon UUID:厂商识别号 Major:相当于群组号,同一个组里Beacon有相同的Major Minor:相当于识别群组里单个的... 阅读详情

http://blog.youkuaiyun.com/jie1991liu/article/details/47403455

iBeacon的工作原理是基于Bluetooth Low Energy(BLE)低功耗蓝牙传输技术,iBeacon基站不断向四周发送蓝牙信号,当智能设备进入设定区域时,就能够收到信号。只要满足iBeacon技术标准的都可以使用,所以Android也能够支持iBeacon。Google在Android4.3中支持BLE技术

定位一直是非常关键的功能。通过iBeacon基站的部署能够实现室内导航,同时通过蓝牙推送信息,iBeacon在商场零售或者一些公共服务领域如体育馆、博物馆能提供非常棒的体验。尤其是蓝牙不错传输距离、低功耗、以及信号加密使得iBeacon在移动支付领域也非常有前景。总之,iBeacon的潜力似乎是无穷大,也受到了越来越多的关注。

要了解iBeacon是如何工作首先我们要了解BLE。BLE(也称为Bluetooth Smart)最早追溯到Nokia于2006年提出的Wibree,后来融合进了蓝牙标准,成为Bluetooth4.0的一部分。目前我们经常能看到3种蓝牙设备:

  • Bluetooth:只支持传统模式的蓝牙设备
  • Bluetooth Smart Ready:支持传统和低功耗两种模式设备
  • Bluetooth Smart:只支持低功耗蓝牙设备

estimote-ibeacon-teardown2

BLE与传统的蓝牙相比最大的优势是功耗降低90%,同时传输距离增大(超过100米)、安全和稳定性提高(支持AES加密和CRC验证)。iBeacon同时有一些自己的特点:

  • 无需配对,一般蓝牙设备印象中都需要配对工作。iBeacon无需配对,因为它是采用蓝牙的广播频道传送信号。
  • 程序可以后台唤醒,iBeacon的信息推送需要App支持。但是我们接收iBeacon信号无需打开App,只要保证安装了,同时手机蓝牙打开。

iBeacon是如何工作呢?实际上iBeacon基站通过蓝牙的广播频道不断向外发送位置信息,发送频率越快越耗电。也就是说iBeacon并不推送消息,而只是用于定位,推送消息的功能必须由App来完成。苹果定义了iBeacon 其中32位广播的数据格式。

estimote-ibeacon-teardown3
  • UUID:厂商识别号
     
  • Major:相当于群组号,同一个组里Beacon有相同的Major
  • Minor:相当于识别群组里单个的Beacon
  • TX Power:用于测量设备离Beacon的距离

UUID+Major+Minor就构成了一个Beacon的识别号,有点类似于网络中的IP地址。TX Power用于测距,iBeacon目前只定义了大概的3个粗略级别:

  • 非常近(Immediate): 大概10厘米内
  • 近(Near):1米内
  • 远(Far):1米外

这里主要是对其用法做一个介绍:

首先是获取BluetoothAdapter对象:

[java]  view plain  copy
  1. final BluetoothManager bluetoothManager =  
  2.                 (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);  
  3.         mBluetoothAdapter = bluetoothManager.getAdapter();  
  4.         mBluetoothAdapter.startLeScan(mLeScanCallback);  

 
 然后就是它的回调,在这里对搜索到的iBeacon设备距手机的信号强度做了一个排序 
 

[java]  view plain  copy
  1. private BluetoothAdapter.LeScanCallback mLeScanCallback =  
  2.             new BluetoothAdapter.LeScanCallback() {  
  3.   
  4.         @Override  
  5.         public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {  
  6.             final iBeacon ibeacon = iBeaconClass.fromScanData(device,rssi,scanRecord);  
  7.             addDevice(ibeacon);  
  8.             Collections.sort(mLeDevices, new Comparator<iBeacon>() {  
  9.                 @Override  
  10.                 public int compare(iBeacon h1, iBeacon h2) {  
  11.                     return h2.rssi - h1.rssi;  
  12.                 }  
  13.             });  
  14.         }  
  15.     };  
最后把搜索到的数据添加到集合中去

[java]  view plain  copy
  1. private ArrayList<iBeacon> mLeDevices = new ArrayList<iBeacon>();  
  2.     private void addDevice(iBeacon device) { //更新beacon信息  
  3.         if(device==null) {  
  4.             Log.d("DeviceScanActivity ", "device==null ");  
  5.             return;  
  6.         }  
  7.           
  8.         for(int i=0;i<mLeDevices.size();i++){  
  9.             String btAddress = mLeDevices.get(i).bluetoothAddress;  
  10.             if(btAddress.equals(device.bluetoothAddress)){  
  11.                 mLeDevices.add(i+1, device);  
  12.                 mLeDevices.remove(i);  
  13.                 break;  
  14.             }   
  15.         }  
  16.         mLeDevices.add(device);  
  17.           
  18.     }  
 
  
 

我们在iBbeaconClass类中对其进行数据的解析处理,参考:https://github.com/AltBeacon/android-beacon-library

[java]  view plain  copy
  1. public class iBeaconClass {  
  2.   
  3.     static public  class iBeacon{  
  4.         public String name;  
  5.         public int major;  
  6.         public int minor;  
  7.         public String proximityUuid;  
  8.         public String bluetoothAddress;  
  9.         public int txPower;  
  10.         public int rssi;  
  11.     }  
  12.     public static iBeacon fromScanData(BluetoothDevice device, int rssi,byte[] scanData) {  
  13.   
  14.         int startByte = 2;  
  15.         boolean patternFound = false;  
  16.         while (startByte <= 5) {  
  17.             if (((int)scanData[startByte+2] & 0xff) == 0x02 &&  
  18.                 ((int)scanData[startByte+3] & 0xff) == 0x15) {            
  19.                 // yes!  This is an iBeacon   
  20.                 patternFound = true;  
  21.                 break;  
  22.             }  
  23.             else if (((int)scanData[startByte] & 0xff) == 0x2d &&  
  24.                     ((int)scanData[startByte+1] & 0xff) == 0x24 &&  
  25.                     ((int)scanData[startByte+2] & 0xff) == 0xbf &&  
  26.                     ((int)scanData[startByte+3] & 0xff) == 0x16) {  
  27.                 iBeacon iBeacon = new iBeacon();  
  28.                 iBeacon.major = 0;  
  29.                 iBeacon.minor = 0;  
  30.                 iBeacon.proximityUuid = "00000000-0000-0000-0000-000000000000";  
  31.                 iBeacon.txPower = -55;  
  32.                 return iBeacon;  
  33.             }  
  34.             else if (((int)scanData[startByte] & 0xff) == 0xad &&  
  35.                      ((int)scanData[startByte+1] & 0xff) == 0x77 &&  
  36.                      ((int)scanData[startByte+2] & 0xff) == 0x00 &&  
  37.                      ((int)scanData[startByte+3] & 0xff) == 0xc6) {  
  38.                      
  39.                     iBeacon iBeacon = new iBeacon();  
  40.                     iBeacon.major = 0;  
  41.                     iBeacon.minor = 0;  
  42.                     iBeacon.proximityUuid = "00000000-0000-0000-0000-000000000000";  
  43.                     iBeacon.txPower = -55;  
  44.                     return iBeacon;  
  45.             }  
  46.             startByte++;  
  47.         }  
  48.   
  49.   
  50.         if (patternFound == false) {  
  51.             // This is not an iBeacon  
  52.             return null;  
  53.         }  
  54.   
  55.         iBeacon iBeacon = new iBeacon();  
  56.   
  57.         iBeacon.major = (scanData[startByte+20] & 0xff) * 0x100 + (scanData[startByte+21] & 0xff);  
  58.         iBeacon.minor = (scanData[startByte+22] & 0xff) * 0x100 + (scanData[startByte+23] & 0xff);  
  59.         iBeacon.txPower = (int)scanData[startByte+24]; // this one is signed  
  60.         iBeacon.rssi = rssi;  
  61.   
  62.         // AirLocate:  
  63.         // 02 01 1a 1a ff 4c 00 02 15  # Apple's fixed iBeacon advertising prefix  
  64.         // e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon profile uuid  
  65.         // 00 00 # major   
  66.         // 00 00 # minor   
  67.         // c5 # The 2's complement of the calibrated Tx Power  
  68.   
  69.         // Estimote:          
  70.         // 02 01 1a 11 07 2d 24 bf 16   
  71.         // 394b31ba3f486415ab376e5c0f09457374696d6f7465426561636f6e00000000000000000000000000000000000000000000000000  
  72.   
  73.         byte[] proximityUuidBytes = new byte[16];  
  74.         System.arraycopy(scanData, startByte+4, proximityUuidBytes, 0, 16);   
  75.         String hexString = bytesToHexString(proximityUuidBytes);  
  76.         StringBuilder sb = new StringBuilder();  
  77.         sb.append(hexString.substring(0,8));  
  78.         sb.append("-");  
  79.         sb.append(hexString.substring(8,12));  
  80.         sb.append("-");  
  81.         sb.append(hexString.substring(12,16));  
  82.         sb.append("-");  
  83.         sb.append(hexString.substring(16,20));  
  84.         sb.append("-");  
  85.         sb.append(hexString.substring(20,32));  
  86.         iBeacon.proximityUuid = sb.toString();  
  87.   
  88.         if (device != null) {  
  89.             iBeacon.bluetoothAddress = device.getAddress();  
  90.             iBeacon.name = device.getName();  
  91.         }  
  92.   
  93.         return iBeacon;  
  94.     }  
  95.   
  96.     public static String bytesToHexString(byte[] src){    
  97.         StringBuilder stringBuilder = new StringBuilder("");    
  98.         if (src == null || src.length <= 0) {    
  99.             return null;    
  100.         }    
  101.         for (int i = 0; i < src.length; i++) {    
  102.             int v = src[i] & 0xFF;    
  103.             String hv = Integer.toHexString(v);    
  104.             if (hv.length() < 2) {    
  105.                 stringBuilder.append(0);    
  106.             }    
  107.             stringBuilder.append(hv);    
  108.         }    
  109.         return stringBuilder.toString();    
  110.     }    
  111. }  

Android BLE开发之Android手机搜索iBeacon基站 阅读详情

相关推荐

Android开发:IBeacon系列——将Android设备变为IBeacon设备

将Android设备变了IBeacon基站,即使用Android设备发送IBeacon广播信息。 要求: 1、硬件 支持BLE Peripheral模式的手机,新款Android手机大部分支持(三星note5, 三星Galaxy Tab S2, Nexus6 ...)</li> 2、软件 Android 系统5.0及以上,在Lollipop中,谷歌扩展了BLE的功能,增加了对Pr...

小五博客园 3174

Android 实现 iBeacon

蓝牙设备分为3种类型: Bluetooth设备(蓝牙BR/EDR):只支持传统蓝牙的设备。 Bluetooth Smart Ready 设备(蓝牙4.0双模):同时支持传统蓝牙和LE模式的设备。 Bluetooth Smart(BLE单模):只支持LE模式的设备。Beacon设备只支持low energy protocols(LE低功耗协议),因此能靠一颗纽扣电池就能运行很长时间。 BLE起源...

司马懿的西山居 8339

android蓝牙4.0(BLE)开发之ibeacon初步

博客地址 http://blog.youkuaiyun.com/sbsujjbcy/article/details/44277851

【Andoird开发】android获取蓝牙权限,beacon,android-beacon-library

传统的GPS技术在室内环境下往往效果不佳,而iBeacon通过布置在建筑物内部的信标,可以实现更精准的室内定位。iBeacon开放的开发平台为开发者提供了广阔的创新空间,他们可以基于iBeacon技术开发各种各样的应用,从而为用户带来更丰富的体验和功能。iBeacon 最先是苹果的技术,使用android-beacon-library包可以在android上开发iBeacon 技术。iBeacon的发明为室内定位和个性化服务领域带来了革命性的变革,极大地丰富了移动应用的功能和体验。

q742971636的博客 797

Android使用android-beacon-library接收beacon

Android使用android-beacon-library接收beacon

Android基于ibeacon实现蓝牙考勤功能

主要为大家详细介绍了Android基于ibeacon实现蓝牙考勤功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

安卓模拟ibeacon_android iBeacon开发模拟实例

这段时间微信周边摇一摇带动的ibeacon新兴市场火得一塌糊涂。iBeacon是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能。其工作方式是,配备有 低功耗蓝牙(BLE)通信功能的设 备使用BLE技术向周围发送自己特有的ID,接收到该ID的应用软件会根据该ID采取一些行动。比如,在店铺里设置iBeacon通信模块的话,便可让iPhone和iPad上运行一资讯告知服务器,或者...

weixin_32954401的博客 1144

CentOS Stream 9中安装MySQL的详细步骤

本文详细介绍了在CentOS Stream 9系统中如何进行MySQL的在线安装、离线安装以及忘记密码的恢复操作。通过阅读本文,您将能够了解并掌握在CentOS Stream 9上安装MySQL的步骤,以及在遇到忘记密码的情况下的解决方案。

小白典的博客 7258

Android开发:IBeacon系列——安卓蓝牙4.0(BLE)开发之检测IBeacon热点初步

检测ibeacon热点信号 软硬件要求:Android4.3及以上中支持BLE技术,同时蓝牙需要满足Bluetooth4.0及以上。 iBeacon的工作原理是基于Bluetooth Low Energy(BLE)低功耗蓝牙传输技术,iBeacon基站不断向四周发送蓝牙信号,当智能设备进入设定区域...

小五博客园 4164

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1878

UE 动态获取 资源缩略图 下载到本地或返回图片信息

UE 动态加载资源缩略图 返回图片信息或保存到本地

qq_46080252的博客 1936

android iBeacon开发模拟实例

这段时间微信周边摇一摇带动的ibeacon新兴市场火得一塌糊涂。 iBeacon是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能。其工作方式是,配备有 低功耗蓝牙(BLE)通信功能的设 备使用BLE技术向周围发送自己特有的ID,接收到该ID的应用软件会根据该ID采取一些行动。比如,在店铺里设置iBeacon通信模块的话,便可让iPhone和iPad上运行一资讯告知服务器,...

专注于移动互联网 8641

nnDetection复现Luna16 附模型

淘论文发现nnDetection框架对肺结节的检测效果挺好,便跑了跑复现了下, 作者诚不欺人,确实挺好, 并附上我依据文档训练的模型。

HeavenWalker 2597

Android开发——iBeacon

1.前言 继低功耗蓝牙开发完后开发iBeacon,其实iBeacon搜索设备和ble开发都一样,这里我只介绍其具体的不同之处, 2.开发环境 华为p20 AndroidStudio 3.2 + 低功耗蓝牙设备 经过测试发现有的手机搜索蓝牙设备需要开启location权限,在华为上我的手机没有开启也可以进行搜索,另外还...

daguniang123的博客 965

Windows11 下 Detectron2 的安装与配置全攻略

本文提供了在Windows11系统下安装和配置Detectron2的完整教程。详细介绍了从环境准备、创建虚拟环境、安装PyTorch与CUDA,到修改源码、编译安装以及运行验证Demo的全过程,帮助开发者克服Windows平台上的常见问题,成功部署这一强大的计算机视觉库。

weixin_29081703的博客 245

DFT与机器学习协同设计高效光催化剂:从电子结构到性能预测

密度泛函理论(DFT)作为计算材料学的基石,通过求解Kohn-Sham方程,能够在原子尺度精确预测材料的电子结构、能带和光学性质,为理解光催化等能源材料的微观机理提供了关键视角。其核心价值在于替代传统试错法,实现材料性能的理性设计与机理揭示。在工程实践中,面对高通量筛选的需求,机器学习(ML)技术,特别是长短期记忆网络(LSTM)这类擅长处理序列数据的模型,能够学习从材料描述符到复杂性能(如光谱)的映射关系,实现快速性能预测与优化。这种DFT与ML的结合范式,正广泛应用于新能源材料、半导体器件等领域,用于高

weixin_30662937的博客 661

android IBeacon 开发(一)搜索IBeacon基站

最近公司在搞IBeacon,因为公司另一个学android的走了,而剩下的人中,只有我接触过java、android,所以只有我来做这个了。 声明,我是一个C#的程序员,java、android都是弱项,只是略有涉及,不懂、错误之处,多多指教。 一开始,我在网上搜IBeacon的资料(使用百度,唉,看来我还是2B程序员啊),最详细的就只有两个,而这两个都是同一个人的,hellogv,播客地址:

white__cat的专栏 2763

OpenCV+ArUco实战:如何用Python实现高精度二维码测距(附完整代码)

本文详细介绍了如何使用Python和OpenCV实现基于ArUco标签的高精度单目视觉测距。通过相机标定、标签检测和三维位置估算,结合完整代码示例,帮助开发者在机器人导航、工业自动化等场景中实现厘米级距离测量,并探讨了精度优化与三维可视化等进阶应用。

weixin_29052717的博客 474

Android iBeacon 开发

iBeacon是苹果公司称为“一种可以检测到附近IOS7设备出现的一种新的低功耗、低成本信号传送器”的一套室内定位系统的商标。 这种技术可以使一个智能手机或其他装置在一个iBeacon基站的感应范围内能够执行相应的命令。iBeacon通过低功耗蓝牙近距离感应来向一个app或操作系统传输通用唯一识别码。 关于iBeacon的工作原理,请参考 http://blog.csdn.

勇敢的蜗牛 6020

Linux内核编程(十三)Input输入子系统

Input 子系统是 Linux 内核中专门为输入设备设计的一个子系统,它提供了一个通用的框架来管理各种输入设备,如键盘、鼠标、触摸屏、游戏手柄等。这个子系统的主要目的是简化和规范化输入设备驱动的开发,同时提高驱动的通用性和兼容性。(1)输入设备:如键盘、鼠标、触摸屏、游戏手柄等,它们是用户与计算机进行交互的主要方式。(2)输入设备驱动的复杂性:传统上,为每种输入设备编写驱动都需要创建文件、进行硬件初始化、实现文件操作函数集和处理中断等。每种设备的驱动可能都有许多重复性的工作。

qq_1033275663的博客 2865

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android 开发中 iBeacon的使用

iBeacon的工作原理是基于Bluetooth Low Energy(BLE)低功耗蓝牙传输技术,iBeacon基站不断向四周发送蓝牙信号,当智能设备进入设定区域时,就能够收到信号。只要满足iBeacon技术标准的都可以使用,所以Android也能够支持iBeacon。Google在Android4.3中支持BLE技术 定位一直是非常关键的功能。通过iBeacon基站的部署能够实现室...

weixin_30719711的博客 108

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android iBeacon集成开发,距离判断 全指南...

emmm… 最近项目组老大让研究一下iBeacon,写一个iBeacon相关的Demo提供给别人…感觉网上的资料好少啊,最后弄完我还是写一份吧,说不定能帮助到别人呢…各种百度,Google…1.iBeacon是什么? http://blog.youkuaiyun.com/jie1991liu/article/details/47403455 http://blog.youkuaiyun.com/eieihihi

蓝色黄梅天的博客 5521

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 用fiddler模拟网络请求超时
下一篇: Java片段 Java中Double和Long互相转换
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值