CLLocationManager定位和ibeacon的检测

一.iOS自带的定位

iOS通过自带的CoreLocation 框架可以获取用户的当前位置,城市,经纬度等信息。

1.导入CoreLocation框架

#import

2.注意,在iOS8以后,需要请求用户同意APP定位,需在info.plist文件中添加字段:

NSLocationWhenInUseUsageDescription  允许在前台使用时获取GPS的描述

NSLocationAlwaysUsageDescription  允许永远可获取GPS的描述

3.创建CLLocationManager地Manager

@interface KLLocationManager()   {

 @property  (nonatomic  ,strong)  CLLocationManager  *locationManager;

}

```

_locationManager= [[CLLocationManageralloc]init];

_locationManager.delegate=self;

_locationManager.pausesLocationUpdatesAutomatically=NO;

_locationManager.desiredAccuracy=kCLLocationAccuracyBest;

```

4.在创建完成后开始执行定位操作

```

if([[UIDevicecurrentDevice].systemVersionfloatValue] >8)

{

/**请求用户权限:分为:只在前台开启定位/在后台也可定位,*/

/**只在前台开启定位*/

//[self.locationManager requestWhenInUseAuthorization];

/**后台也可以定位*/

[self.locationManagerrequestAlwaysAuthorization];

}

if([[UIDevicecurrentDevice].systemVersionfloatValue] >9)

{

/** iOS9新特性:将允许出现这种场景:同一app中多个location manager:一些只能在前台定位,另一些可在后台定位(并可随时禁止其后台定位)。*/

[self.locationManagersetAllowsBackgroundLocationUpdates:YES];

}

[self.locationManagerstartUpdatingLocation];

```

5.实现CllocationDelegate代理方法,获取当前位置信息

```

- (void)locationManager:(CLLocationManager*)manager didUpdateLocations:(NSArray *)locations {

  /// 此为定位成功的回调方法

}

```

6.iOS后台定位的问题。

添加了NSLocationAlwaysUsageDescription  允许永远可获取GPS的描述字段,开启backgroudMode,调用允许后台定位的方法之后,在App UIApplicationStateInactive 状态下能持续定位,已做测试,测试时间1个小时


二、CLLocationManager对ibeacon的检测。

检测你的ibeacon设备,由于在本项目中,一个ibeacon设备作为长连接设备,另一个作为报警设备,所以在此,我们对两个ibeacon设备进行检测

1.使用的框架和LocationManager使用的是一样的,创建过程,添加字段等发发同上。

2.在创建完成,设置代理后,创建两个CLBeaconRegion设备,让manager对两个设备进行检测。

```

CLBeaconRegion    *linkRegion = [[CLBeaconRegion  alloc]  initWithProximityUUID:[[NSUUID    alloc]    initWithUUIDString:@"12345679-8012-3456-7980-123456798011"] identifier:@"KLLinkDevice"];

CLBeaconRegion    *alarmRegion = [[CLBeaconRegion  alloc]  initWithProximityUUID:[[NSUUID    alloc]    initWithUUIDString:@"cd62f6f9-fc11-4a7e-a9f3-bb50a32d0000"] identifier:@"KLAlarmDevice"];

linkRegion.notifyOnExit=YES;

linkRegion.notifyOnEntry=YES;

linkRegion.notifyEntryStateOnDisplay=YES;

alarmRegion.notifyOnExit=YES;

alarmRegion.notifyOnEntry=YES;

alarmRegion.notifyEntryStateOnDisplay=YES;

[self.locationManagerstartMonitoringForRegion:linkRegion];

[self.locationManagerstartMonitoringForRegion:alarmRegion];

```

注意:linkRegion.notifyOnExit=YES;

           linkRegion.notifyOnEntry=YES;

           linkRegion.notifyEntryStateOnDisplay=YES; 如果不设置这几个参数的话,将不会进入检测beacon进入和退出的方法。

3.实现检测回调

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

}

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

}

- (void)locationManager:(CLLocationManager*)manager

didDetermineState:(CLRegionState)state forRegion:(CLRegion*)region {

}

在开启后台模式之后,不管app出于运行、后台、还是挂起状态都会唤醒app执行该回调,你有10秒钟的唤醒时间用于处理数据(本地,或者请求服务器)


    检测ibeacon的进入比较及时,当关闭ibeacon时,检测会有10-50秒的延时。

你可能感兴趣的:(CLLocationManager定位和ibeacon的检测)