1. 程式人生 > >iOS CoreLocation框架

iOS CoreLocation框架

官方參考文件:https://developer.apple.com/documentation/corelocation/cllocationmanager

  • 匯入CoreLocation框架和對應的主標頭檔案

#import <CoreLocation/CoreLocation.h>
  • 建立CLLcationManager物件,並設定代理

_locationM = [[CLLocationManager alloc] init];
_locationM.delegate = self;
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0
) { //iOS8.0+前臺定位授權,並配置Info.plist檔案:NSLocationWhenInUseUsageDescription [_locationM requestWhenInUseAuthorization]; //iOS8.0+後臺定位授權,並配置Info.plist檔案:NSLocationAlwaysUsageDescription //[_locationM requestAlwaysAuthorization]; }
  • 呼叫CLLcationManager物件的startUpdatingLocation方法進行更新使用者位置

[_locationM startUpdatingLocation];
  • 呼叫CLLcationManager物件的startUpdatingHeading方法進行更新裝置朝向
[_locationM startUpdatingHeading];
  • 呼叫CLLcationManager物件的startMonitoringForRegion:方法進行監聽指定區域
// 建立區域中心
CLLocationCoordinate2D center = CLLocationCoordinate2DMake(29.12345
, 131.23456); // 建立區域(指定區域中心,和區域半徑) CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center radius:1000 identifier:@"廣州"]; // 開始監聽指定區域 [self.locationM startMonitoringForRegion:region];
  • 實現代理方法,接收位置更新引數

-(void)locationManager:(nonnull CLLocationManager *)manager didUpdateLocations:(nonnull NSArray<CLLocation *> *)locations

 

  • 實現代理方法,接收方向更新引數:
-(void)locationManager:(nonnull CLLocationManager *)manager didUpdateHeading:(nonnull CLHeading *)newHeading
  • 實現代理方法,獲取區域進入或者離開狀態:
// 進去監聽區域後呼叫(呼叫一次)
-(void)locationManager:(nonnull CLLocationManager *)manager didEnterRegion:(nonnull CLRegion *)region
{
      NSLog(@"進入區域---%@", region.identifier);
      [manager stopMonitoringForRegion:region];
}
// 離開監聽區域後呼叫(呼叫一次)
-(void)locationManager:(nonnull CLLocationManager *)manager didExitRegion:(nonnull CLRegion *)region
{
      NSLog(@"離開區域---%@", region.identifier);
}

 


相關配置:

  • iOS8.0後臺定位配置:

   

  • iOS8.0+:

  前臺定位配置Info.plist檔案:

  

  後臺定位:

if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) 
 {
    //iOS8.0+後臺定位授權,並配置Info.plist檔案:NSLocationAlwaysUsageDescription
   [_locationM requestAlwaysAuthorization];
 } 

  配置Info.plist檔案: 

  

  • iOS9.0後臺定位補充:

可使用iOS8.0+的後臺定位方法,也可按照以下方式新增。

勾選後臺執行模式Locations Updates,並且呼叫以下方法,設定允許後臺定位:

if ([[UIDevice currentDevice].systemVersion floatValue] >= 9.0) {
        _locationM.allowsBackgroundLocationUpdates = YES;
}