iOS ibeacon 使用详解

前段时间写项目,设计到了通过蓝牙ibeacon 的方式接收数据,最开始自己都之前都没听过什么叫ibeacon,然后就开始查资料,慢慢的也了解并知道了ibeacon怎么使用了。先大概解释下ibeacon到底是个什么,在我理解ibeacon可以理解为一个发射信号的基站,类似于移动的信号塔。手机作为一个设备时,进入到了发射基站的信号覆盖范围内,那么手机就能够收到基站发出的信息,这里就是所谓的ibeacon数据。当然也要基站发送数据手机才能够接受到数据。

下面说说ibeacon的使用。

1 首先需要需要在项目plist 中配置 Privacy - Location Always Usage Description 让程序允许使用位置

2 要使用ibeacon ,需要在项目中导入  CoreLocation 框架

3 实例化一个位置管理者对象,这里叫做 CLLocationManager ,再实例化一个ibeacon 对象: CLBeaconRegion

    self.locationmanager = [[CLLocationManager alloc]
                            
                            init];//初始化
    
    self.locationmanager.delegate = self;
    _locationmanager.distanceFilter=10;//实时更新定位位置
    _locationmanager.desiredAccuracy=kCLLocationAccuracyBest;//定位精确度
    self.beacon1 = [[CLBeaconRegion alloc]
                    
                    initWithProximityUUID:[[NSUUID alloc]
                                           
                                           initWithUUIDString:BEACONUUID]
                    
                    identifier:@"media"];//初始化监测的iBeacon信息

  [self.locationmanager requestAlwaysAuthorization];

4 当位置管理者的代理被调用,知道了可以时刻使用用户的位置时然后开始读取指定beacon的数据

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
    if (status == kCLAuthorizationStatusAuthorizedAlways) {
        
        [self.locationmanager startMonitoringForRegion:self.beacon1];//开始
        [self.locationmanager startRangingBeaconsInRegion:self.beacon1];
        
    }
}

 5 当手机进入到了硬件设备的区域之后就会收到硬件设备发出的beacon 信息

- (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-=mj%d-====min%d",beacon.rssi,beacon.major.intValue,beacon.minor.intValue);
    }
}

如果在硬件范围内,硬件一直在发射信号,那么手机就会一直收到硬件的ibeacon数据   

 

posted @ 2017-09-14 18:36  ZhangShengjie  阅读(2203)  评论(0编辑  收藏  举报