IOS7 iBeacons探寻

2024-06-07 10:58
文章标签 ios7 探寻 ibeacons

本文主要是介绍IOS7 iBeacons探寻,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在学习iBeacons发现这个东西很有潜力,能够改善未来我们生活中的很多用户体验。iBeacons 是IOS7系统最新推出的一个类似于RFID的微定位技术。利用蓝牙4.0(低功耗蓝牙)进行数据传输(iphone 4s 以上设备)。手持设备能够在一定的范围内(可以达到50m之内)收到IBecons基站发送的信号。任何实现了IBeacon协议的蓝牙设备都可以充当ibeacon基站使用。不同其它利用GPS,蜂窝数据等的定位方式。蓝牙4.0本身的成本低,设备的耗电量也低所以相比其它定位方式有自己的优势。并且这种定位直接是端对端的直接定位,省去了GPS的卫星和蜂窝数据的基站通信,是对现有定位技术的一个有效的补充,有其利用的独特的场景和价值。

iBeacons开发

Beacon Broadcasting

所有支持蓝牙4.0iDevice都能够作为beacon基站发射信号,这就需要 CoreBluetooth.framework 的支持。 我们需要创建一个CBPeripheralManager实例,然后发射beacon广播信号:


一个beacon基站主要有三个属性,即上面说到过的:proximityUUID major minor,对应到CoreLocation中的CLBeacon类:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. @interface CLBeacon : NSObject <NSCopying, NSSecureCoding>  
  2. //...  
  3. @property (readonly, nonatomic) NSUUID *proximityUUID;  
  4. @property (readonly, nonatomic) NSNumber *major;  
  5. @property (readonly, nonatomic) NSNumber *minor;  
  6. //...  
  7. @end  

//beacon基站创建一个唯一标示

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  
  1. time_t t;

        srand((unsignedtime(&t));

        CLBeaconRegion *region = [[CLBeaconRegion allocinitWithProximityUUID:self.beaconRegion.proximityUUID

                                                                         major:rand()

                                                                         minor:rand()

                                                                    identifier:self.beaconRegion.identifier]; 

proximityUUID :对于每个公司这个是唯一的。对于该公司的所有的ibeacons都有相同的UUID。

major:相关的一系列ibeacons的标示。

minor:某个特殊的ibeacon的标示。

identifier:该beacons区域的唯一标示。

举个例子:一个展览公司A,和一个展览公司B会有不同的proximityUUID,展览公司A在地址C和地址D有不同的展览馆,那么他们就有不同的major值。对于地址C的展览馆里面的不同楼层有会有不同的minor值。所以我们可以根据proximityUUID,major,minor三个值唯一确定一个ibeacon。


//获取该Beacon区域的信号信息

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. NSDictionary *peripheralData = [region peripheralDataWithMeasuredPower:nil];  

//创建并广播Beacon信号

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. CBPeripheralManager *peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()];  
  2. [peripheralManager startAdvertising:peripheralData];  

当然你还需要在CBPeripheralManagerDelegate 代理方法: peripheralManagerDidUpdateState: 根据不同的状态做一些处理。


Beacon Monitoring

苹果将iBeacons相关的接口放到了 CoreLocation.framework 。在iOS7之前,我们可以通过CLRegion定义一个地理区域,来跟踪设备在该区域内的运动情况,iOS7之后,CLRegion被完全变成了一个抽象类,子类CLCircularRegionCLBeaconRegion分别承担实现一个地理区域和Beacon信号区域的功能。


iOS7之后的CLRegion主要有两个属性:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. @interface CLRegion : NSObject <NSCopying, NSSecureCoding>  
  2. @property (nonatomic, assign) BOOL notifyOnEntry;  
  3. @property (nonatomic, assign) BOOL notifyOnExit;  
  4. @end  

notifyOnEntrynotifyOnExit分别标记是否在进入和退出该区域时调用对用代理方法。CLBeaconRegion另外增加了一个属性notifyEntryStateOnDisplay标记是否在用户手机屏幕点亮时调用代理方法。


创建一个 CLBeaconRegion ,我们需要先创建一个目标监控区域唯一的UUID(该UUID需要跟之前基站的UUID一致)

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. CLBeaconRegion *targetBeaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:

    self.beaconRegion.proximityUUID

     identifier:self.beaconRegion.identifier];  

创建完Regoin后,我们需要对该Region进行监控以获取是否进入该区域及一些距离等信息,我们需要创建一个CLLocationManager实例然后调用startMonitoringForRegion:方法来监控上面的BeaconRegion

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. self.locationManager = [[CLLocationManager alloc] init];  
  2. self.locationManager.delegate = self;  
  3. [self.locationManager startMonitoringForRegion:targetBeaconRegion];  

剩下的就是通过CLLocationManagerDelegate中的各个方法来获取监控区域内的所有CLBeacon基站,进入或退出某个Beacon区域,计算举例某个CLBeacon的距离等。

这篇关于IOS7 iBeacons探寻的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038980

相关文章

探寻 IP 代理地址繁多之因

在当今的网络天地里,IP 代理服务随处可见,且令人称奇的是,它们常常手握海量的 IP 地址可供挑选。那么,究竟是什么原因使得 IP 代理拥有如此众多的地址呢?现在,就让我们一同深入探究这个神秘现象背后的缘由。 从实际需求层面出发,不同的用户身处各异的使用场景,怀揣着不同的目的。企业在进行大规模数据采集时,往往期望避免被目标网站认定为单一来源进而遭到访问限制。在这种情况下,数量庞大的不同 IP

适配iOS6与iOS7

适配屏幕其实很简单,但为了保持兼容性以及写的代码的通用性,以及最小的改动代码,本人按照如下的一种方式来适配,可以一劳永逸. 1. 先定义几个宏,分辨表示应用可以使用区域的高度,屏幕可用区域的高度,屏幕的宽度 2. 再看看如下图的一些描述 3. 接下来看看适配的代码如何写 #import "RootViewController.h"#define iOS7

苹果录屏功能究竟何在?深入探寻苹果设备上的录屏功能:简便、高效、一键达成

在当下这一数字化的时代,不论是教学演示,还是游戏分享,抑或是工作汇报,录屏软件皆已成为我们日常生活中不可或缺之工具。苹果设备以其出类拔萃的用户体验而声名远播,而其内置的录屏功能更是将便捷性与功能性精妙融合。今日,就让我们共同深入探究如何于苹果设备上轻松启用并运用录屏功能,使您的记录过程变得殊为简便。 苹果设备上的录屏功能极为直观且易于操作,以下为在不同苹果设备上启用和使用录屏功能的基本步

Solr高亮及搜索逻辑探寻

Solr高亮及搜索逻辑探寻 原文:http://leoluo.top/2017/11/21/Solr%E6%95%B0%E5%AD%97%E9%AB%98%E4%BA%AE%E5%BC%82%E5%B8%B8/ Blog:Why So Serious Github: LeoLuo22 CSDN: 我的CSDN 0x00 前言 马上就要发版本了,这次版本要新上对产品和功能

走进酒厂,探寻白酒酿造的奥秘

在华夏大地深处,隐藏着一座座充满神秘色彩的酒厂,它们是白酒酿造的地方,也是中华酒文化的摇篮。今天,就让我们一起走进这些酒厂,探寻白酒酿造的奥秘,感受豪迈白酒(HOMANLISM)的不同魅力。 一、酒厂之门,历史的见证 酒厂的大门,宛如一扇时光之门,将我们带入了一个充满历史与传承的世界。在这里,每一块砖、每一片瓦都承载着岁月的痕迹,诉说着白酒酿造的悠久历史。走进酒厂,我们仿佛能闻到那飘散的酒

运维工程师的出路揭秘:跨越35岁半衰期,探寻职业发展新路径_运维有35岁之说吗

写在前面 随着信息技术的迅猛发展和数字化转型的深入推进,运维工程师的角色在企业和组织中愈发重要。他们是保障系统稳定运行、确保数据安全和提升业务连续性的中坚力量。然而,随着技术的不断演进和市场需求的变化,运维工程师面临着前所未有的挑战和机遇。 “运维工程师的出路到底在哪里?”这个问题不仅困扰着从业者,也引起了行业的广泛关注。是继续深耕技术,成为某一领域的专家?还是转型至管理岗位,发挥更大的

探寻C/C++中更快的大数(自然数集)模板

本文系fcbruce个人原创整理,转载请注明出处http://blog.csdn.net/u012965890/article/details/40432511,谢谢! 我们知道在C/C++中int型可处理-2^31~2^31-1(32位及以上编译器),long long型可处理-2^63~2^63-1的数据,这实际上是非常有限的,在很多情况下,我们往往会处理范围更大的数据。Java中有B

UINavigationController 导航控制器 IOS7适配 导航栏不透明

摘要  UINavigationController 导航控制器 IOS7适配 导航栏不透明 UINavigationController  导航控制器  IOS7适配  导航栏不透明 导航控制器使用了导航堆栈。根视图控制器(Settings)在堆栈最底层,以此类推。可以理解为一本书,一页一页的。这样就控制了 试图控制器 ? 1 2 3 self

ios7 programming cookbook学习笔记二

1 UILabel 定制  常用属性 shadowColor   shadowOffset  numberOfLines   lineBreakMode   textAlignment   textColor    font   adjustsFontSizeToFitWidth  2 UITextField   在Interface Builder中你拖拽过来的textfield高度是没法

ios7 programming cookbook学习笔记一

---系统学习iOS编程,查漏补缺,只是简要记录自己薄弱部分 1  NSDictionary 这个已经很熟悉只是有一点自己不知道:就是他的另外取值方式,例如: NSDictionary *personInformation =@{@"firstName" : @"Mark",@"lastName" : @"Tremonti",@"age" : @30,@"sex" : @"Male"