1.在info.plist中添加
Privacy - Location Always Usage Description 显示给用户看的信息 例如:将获取您的位置信息
Privacy - Location When In Use Usage Description 显示给用户看的信息 例如:将获取您的位置信息
2.添加以下头文件:
#import <CoreLocation/CoreLocation.h>
#import <CoreBluetooth/CoreBluetooth.h>
3.创建2个属性
@property(nonatomic,strong)CLBeaconRegion *beaconRegion;
@property(nonatomic,strong)CLLocationManager *locationManager;
4.初始化对象实例,并开始扫描指定UUID的Beacon
self.locationManager= [[CLLocationManageralloc]init];
self.locationManager.delegate=self;
if([[UIDevice currentDevice].systemVersion floatValue] >=8.0) {
//请求允许定位通知
[self.locationManager requestWhenInUseAuthorization];
//请求允许声音等通知
[[UIApplication sharedApplication] registerUserNotificationSettings: [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]];
}
uuid是Beacon的UUID,此处为宏,identifier好像怎么设置都没影响,是一个字符串
self.beaconRegion= [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:uuid] identifier:""];
//开始监听Beacon消息
[self.locationManager startMonitoringForRegion:self.beaconRegion];
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}
5.代理的回调方法一:进入Beacon范围内触发,后台模式也可以触发
- (void)locationManager:(CLLocationManager*)manager didEnterRegion:(CLRegion*)region {
//以下方法 目前我也未搞清楚有何用,不写也不影响的感觉
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}
6.代理的回调方法二:获取Beacon的信息,例如RSSI,UUID,major,minor,accuracy(距离),后台模式不能触发,除了把整个APP设置后台一直运行
- (void)locationManager:(CLLocationManager*)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion*)region {
beacons是一个数组,一次性扫描到的beacon,大约1S回调一次这个方法
}
7.代理的回调方法三:离开Beacon范围内
- (void)locationManager:(CLLocationManager*)manager didExitRegion:(CLRegion*)region {
//以下方法 目前我也未搞清楚有何用,不写也不影响的感觉
[self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}
注意:市场上有一些Beacon应用是可以同时搜索到Beacon的各参数,Beacon名称,传感器数据等。这里我猜测是同时运行了2种蓝牙搜索模式,BLE搜索,Beacon搜索,2个模式合并封装而成的。我也尝试过可以获取想要的各项数据。