iOS开发 关于iBeacon的一些记录 - jy_king

jyking 2021-10-16 原文


iOS开发 关于iBeacon的一些记录


最近时间一直在研究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值因为距离有点远,所一要在此时做些动作和这三个参数有关的话需要小心。

posted on
2016-01-13 10:23 
jy_king 
阅读(512
评论(1
编辑 
收藏 
举报

 

版权声明:本文为jyking原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jyking/p/5126444.html

iOS开发 关于iBeacon的一些记录 - jy_king的更多相关文章

  1. yara – lydstory

    yara https://blog.csdn.net/qq_36090437/article/details/ […]...

  2. .netframewor金山卫士推送微软8月补丁 IE所有版本存在高危漏洞 – net framework 3.5

    .netframewor金山卫士推送微软8月补丁 IE所有版本存在高危漏洞   8月10日凌晨,微软刚刚发布了 […]...

  3. MBSE系统工程的本质 – 朝阳小胖

    MBSE系统工程的本质 系统工程的核心思想是“系统思想”,系统工程研究的对象是“系统”,系统“可大可小”,具有 […]...

  4. Oracle11g的安装卸载及经常使用工具的使用 – jzssuanfa

    Oracle11g的安装卸载及经常使用工具的使用 Oracle11g的安装卸载及经常使用工具的使用 目的: ( […]...

  5. linux概念之时间与时区 – 阳光-源泉

    linux概念之时间与时区 http://www.cnblogs.com/liuyou/archive/201 […]...

  6. 基于 Java NIO 实现简单的 HTTP 服务器

    1.简介 本文是上一篇文章实践篇,在上一篇文章中,我分析了选择器 Selector 的原理。本篇文章,我们来说 […]...

  7. ubuntu 设置root用户密码并实现root用户登录 – huaweichenai

    ubuntu 设置root用户密码并实现root用户登录 一:设置root用户密码 在ubuntu中root用 […]...

  8. linux中文件的三种time(atime,mtime,ctime) – LinuxPanda

    linux中文件的三种time(atime,mtime,ctime) linux下文件有3个时间的,分别是at […]...

随机推荐

  1. 使用WakeLock将Android应用程序保持后台唤醒

    前言: 一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息。 […]...

  2. Java web项目所需技术*(大概)

     实施java 的web项目需要掌握的技术如下:    1.java语言    2.  面向对象分析设计 XM […]...

  3. dao 接口定义了一个方法,报错 The method xxx is undefined for the type xxx;

    转自:https://blog.csdn.net/panshoujia/article/details/782 […]...

  4. 事件溯源模式(Event Sourcing Pattern)

    此文翻译自msdn,侵删。 原文地址:https://msdn.microsoft.com/en-us/lib […]...

  5. @常见的远程服务器连接工具:Xshell与secureCRT的比较!!!(对于刚接触的测试小白很有帮助哦)

    现在比较受欢迎的终端模拟器软件当属xshell和securecrt了。 XShell绝对首选,免费版也没什么限 […]...

  6. Project Euler 54: Poker hands

    在纸牌游戏中,一手包含五张牌并且每一手都有自己的排序,从低到高的顺序如下: 大牌:牌面数字最大 一对:两张牌有 […]...

  7. MGR原理及集群搭建

    一、MySQL MGR演化 1.1 MySQL异步复制 master事务的提交不需要经过slave的确认,sl […]...

  8. 电脑任务栏闪烁以及任务栏图标闪烁解决办法

     前言:近来笔者发现电脑不时的电脑桌面和菜单栏会不停的闪烁,只能通过Ctrl + shift + ESC打开任 […]...

展开目录

目录导航