美文网首页互联网的世界菊花党ios学习
iOS开发 关于iBeacon的一些记录

iOS开发 关于iBeacon的一些记录

作者: 沙瓦迪卡 | 来源:发表于2015-03-04 13:08 被阅读17018次

更新下 把我之前写的demo找到了放到git上面了 地址

最近时间一直在研究ibeacon所以把自己遇到的一些问题写下来做个笔记。

参考资料:https://github.com/nixzhu/dev-blog/blob/master/2014-04-23-ios7-ibeacons-tutorial.md

iBeacon是苹果被允许能在后台运行的,不论你将应用退出到后台还是杀死,iBeacon都能激活应用不过只能激活10秒左右,但是这段时间足可以做很多事情了。

一.iBeacon的使用

开始监听你的Ibeacon。

在iOS8里面苹果改变了地位的开启方式(iBeacon的使用是基于蓝牙和定位的),首先要在工程里的info.plist增加字段NSLocationAlwaysUsageDescription(这个是允许一直在后台运行的)

接着在程序里添加

`- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status`

{

if (status == kCLAuthorizationStatusAuthorizedAlways) {

[self.locationmanager startMonitoringForRegion:self.beacon1];

}

}`

.h文件

#import<UIKit/UIKit.h>

#import<CoreLocation/CoreLocation.h>

#import<CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,CLLocationManagerDelegate,>

@property (nonatomic, strong) NSArray *beaconArr;//存放扫描到的iBeacon

@property (strong, nonatomic) CLBeaconRegion *beacon1;//被扫描的iBeacon

@property (strong, nonatomic) CLLocationManager * locationmanager;

@end,,,

.m文件

#define BEACONUUID @"12334566-7173-4889-9579-954995439125"//iBeacon的uuid可以换成自己设备的uuid

- (void)viewDidLoad {

[super viewDidLoad];

self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, 320, 400)];

self.tableView.delegate = self;

self.tableView.dataSource = self;

[self.view addSubview:self.tableView];

self.beaconArr = [[NSArray alloc] init];

self.locationmanager = [[CLLocationManager alloc] init];//初始化

self.locationmanager.delegate = self;

self.beacon1 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:BEACONUUID] identifier:@"media"];//初始化监测的iBeacon信息

[self.locationmanager requestAlwaysAuthorization];//设置location是一直允许

}

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{

if (status == kCLAuthorizationStatusAuthorizedAlways) {

[self.locationmanager startMonitoringForRegion:self.beacon1];//开始MonitoringiBeacon

}

}

{

//发现有iBeacon进入监测范围

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{

[self.locationmanager startRangingBeaconsInRegion:self.beacon1];//开始RegionBeacons

}

//找的iBeacon后扫描它的信息

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region{

//如果存在不是我们要监测的iBeacon那就停止扫描他

if (![[region.proximityUUID UUIDString] isEqualToString:BEACONUUID]){

[self.locationmanager stopMonitoringForRegion:region];

[self.locationmanager stopRangingBeaconsInRegion:region];

}

//打印所有iBeacon的信息

for (CLBeacon* beacon in beacons) {

NSLog(@"rssi is :%ld",beacon.rssi);

NSLog(@"beacon.proximity %ld",beacon.proximity);

......

}

self.beaconArr = beacons;

[self.tableView reloadData];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return self.beaconArr.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

static NSString *ident = @"cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ident];

if (!cell) {

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ident];

}

CLBeacon *beacon = [self.beaconArr objectAtIndex:indexPath.row];

cell.textLabel.text = [beacon.proximityUUID UUIDString];

NSString *str;

switch (beacon.proximity) {

case CLProximityNear:

str = @"近";

break;

case CLProximityImmediate:

str = @"超近";

break;

case CLProximityFar:

str = @"远";

break;

case CLProximityUnknown:

str = @"不见了";

break;

default:

break;

}

cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ %ld %@ %@",str,beacon.rssi,beacon.major,beacon.minor];

return cell;

}

二.ibeacon的参数

uuid唯一标识此类iBeacon。

proximity远近范围的,有Near(在几米内),Immediate(在几厘米内),Far(超过 10 米以外,不过在测试中超不过10米就是far),Unknown(无效)

major和minor组合后区分同一类型下的iBeacon。

accuracy和iBeacon的距离

rssi信号轻度为负值,越接近0信号越强,等于0时无法获取信号强度

三.碎碎念

当进入iBeacon范围是会触发didEnterRegion方法,此时可能获取不到iBeacon的rssi ,proximity,accuracy值因为距离有点远,所一要在此时做些动作和这三个参数有关的话需要小心。

相关文章

  • iOS 中 iBeacon 开发

    iOS 中 iBeacon 开发 iOS 中 iBeacon 开发

  • 开发使用 iBeacon 的 iOS 7 应用

    开发使用 iBeacon 的 iOS 7 应用 开发使用 iBeacon 的 iOS 7 应用

  • iOS开发 关于iBeacon的一些记录

    更新下 把我之前写的demo找到了放到git上面了地址 最近时间一直在研究ibeacon所以把自己遇到的一些问题写...

  • iBeacon开发学习资料整理

    开发使用 iBeacon 的 iOS 7 应用:http://www.cocoachina.com/industr...

  • iOS iBeacon开发

    1.在info.plist中添加 Privacy - Location Always Usage Descript...

  • iOS iBeacon开发

    应用场景 最近有个项目需求是,在展会的各个商家展位上配置iBeacon设备,当用户(手机上安装公司APP)进入ib...

  • iBeacon 应用实例

    iBeacon是什么?     苹果官方对iBeacon的描述:iBeacon是iOS 7推出的一项技术,可为AP...

  • iOS 中 iBeacon 开发

    iBeacon 介绍 iBeacon 是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能。其工...

  • iOS 中 iBeacon 开发

    什么是iBeacon? iBeacon 是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能。其...

  • iOS 中 iBeacon 开发

    什么是iBeacon? iBeacon 是苹果公司2013年9月发布的移动设备用OS(iOS7)上配备的新功能。其...

网友评论

  • Deps:有没有后台ibeacon发送信号的,我不需要接收
  • 加油fight:大神。设备名称和设备地址改如何获取 ,我下了LightBeacon里面有为什么我获取不到
  • 中秋梧桐语:ibeacon 可以持续使App保持唤醒吗?或者说一直接收到硬件发过来的数据
  • Dreamhai:楼主你好,能不能在不知道uuid的情况来扫描周围的ibeacon呢,这个只能是扫描确定uuid的ibeacon设备呀
    Dreamhai:@沙瓦迪卡 哦哦 好吧 已经找了好多 大部分都是说只能扫描到指定的uuid major等信息信息才行
    沙瓦迪卡:@Dreamhai 应该是可以的,当时用的测试APP是有的,我好久都没做这个了,你查查
  • 我的时代我开创:楼主在吗?问下
    扫描i beacon 调用
    [_locationManager startMonitoringForRegion:_iBR8];
    [_locationManager startRangingBeaconsInRegion:_iBR8];
    没反应 会是什么情况啊?
  • 我的时代我开创:这是根据uuid扫描吧?是不是一次最多只能扫描20个知道uuid的ibeacon啊,如果超过20个怎么扫描啊?
  • 6054a4da381e:怎么再不知道uuid的情况下,去扫描多个ibeacon的uuid啊
  • wokenshin:大哥,你的代码 第一个方法是写在哪个类里面的?
    介是阿姐:locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 这个是CLLocationManagerDelegate的代理方法,CLLocationManager这个类有个delegate准守了CLLocationManagerDelegate协议,所以你就看你的LLocationManager在哪创建和设置代理了,你就把那个方法写在哪个类里面,还是根据你的需求写的吧,
  • 无心落残梦:qq 990219310 求作者帮助,我没法在app 退到后台获取周围的ibeacon数据
    码农斯密达:36172788@qq.com 求demo 谢谢大神
    无心落残梦:@沙瓦迪卡 大神,我真的哭了,根本不知道哪里出问题了 ,求帮助啊,3天了我都没有找到哪里错了,就是退到后台搜索不到周围的ibeacon 数据了,求助啊,在做不出来要被开了
    沙瓦迪卡:@无心落残梦 你是不按这个过程最多,再仔细核对下
  • 2226b11e91fb:2320339975@qq.com 求Demo 谢谢
  • 無中生有:我对着上面写的,怎么获取不到?可以发个Demo给我吗,谢谢了。499526944@qq.com
    贪妄:@Mr_悟空 你可以先下载个 玩转Beacon 扫描下附近的IBeacon,看下是不是UUID写错了;还有个可能就是代码中的设置问题,在手机进入IBeacon信号范围内时才能搜到附近设备
    Mr_悟空:@贪妄 我修改成了附近的uuid怎么还是收不到附近的设备啊
    贪妄:@轩辕暮云 UUID需要改下,改成你附近设备的UUID
  • 巴图鲁:膜拜
  • 抹茶不加糖:请问,可以获取到iBeacon的名字么
    d0ef92fc5493:在么 macAdress 怎么获取
    抹茶不加糖:@纠结的哈士奇 macAdress?我看苹果没给我这个参数啊
    纠结的哈士奇:@抹茶不加糖 可以 除了name,一般UUID、macAddress、major、minor都是可以取到的
  • 纠结的哈士奇:楼主 最后一句的描述,的确存在,我这边有时就会发生,比如在后台情况下,触发了区域回调,然后我立即去扫描设备,但是会发生扫描不到的情况,count=0,这时就会不准,不知道有没有人也发现这个问题,又是怎么解决的,望指教。。。
    纠结的哈士奇:@Pocket 不开启 always,是不能在后台模式收到通知的

    至于你说的你在plist加了这个权限,被问起了,你写清楚你的目的一般就行了

    我这边也加了这个权限,不过没收到apple的询问。
    Pocket:您好,我想问一下设备支持iBeacons,如果我项目不开启NSLocationAlwaysUsageDescription,还能在程序没启动或者后台休眠状态下检测到吗。因为上架的app被审核人员问及了NSLocationAlwaysUsageDescription使用目的。希望给予答复,谢谢!
    宁哈哈哈:@纠结的哈士奇 求demo啊1659918210@qq.com,谢谢
  • 纵横四海:同求demo 295876514@qq.com 谢谢了 :flushed:
  • 9d8bd178a546:楼主,- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(CLBeaconRegion *)region;// 我按照你说的 写的,打印出来 beacons 为空
    72fdcf2bb6be:我的也是空,请问是哪里的问题?
    宁哈哈哈:我也不触发
    淡默无痕:@9d8bd178a546为什么我这个代理方法都不触发的啊?
  • 站住二狗子:求demo 1123143614@qq.com
  • 小王子sl:我罩着博客写为什么获取不了ibeacon信息呢
    喔酃:@小王子sl 最近在做iBeacon能发个demo吗,547539226@qq.com,谢谢
    a4f514157622:@小王子sl你获取到了么
  • Ray_win:楼主 可以发下demo吗 877966129@qq.com 谢谢
  • 0x0F:您好,我想问一下,可不可以获取到iBeacon设备的UUID。
    0x0F:@潘柏信 我没获取到的,项目紧,没去研究蓝牙
    沙瓦迪卡:应该是可以的,获取到周围的设备用uuid去匹配,我好久都没弄这个了有点忘
    潘柏信:@Manloff 同问,你能获取到吗?
  • 6b9270bfa953:您好,我最近也在做ibeacon的相关,但是我是新手,英语也很差,能发您的demo到我的邮箱吗? 简单的就好 谢谢349872481@qq.com。
  • 尼枚哉:markdown里面代码块可以用```

本文标题:iOS开发 关于iBeacon的一些记录

本文链接:https://www.haomeiwen.com/subject/lointttx.html