iOS CoreLocation框架
阿新 • • 發佈:2018-11-17
官方參考文件: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; }