iOS中用CoreLocation實(shí)現(xiàn)定位

#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()<CLLocationManagerDelegate>

//必須把CLLocationManger聲明屬性
@property (nonatomic, strong) CLLocationManager *mgr;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //1.初始化manager對(duì)象
    self.mgr = [CLLocationManager new];
    //2.詢問/征求用戶定義允許(iOS8+)
    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        //需要用戶的同意(僅僅是在使用期間/前臺(tái))+Info.plist添加key
        [self.mgr requestWhenInUseAuthorization];
        //征求前臺(tái)和后臺(tái)都定位+Info.plist添加key
//        [self.mgr requestAlwaysAuthorization];
    } else {
        //直接定位
        [self.mgr startUpdatingLocation];
    }
    //3.設(shè)置代理
    self.mgr.delegate = self;
}

//監(jiān)聽用戶的狀態(tài)(同意/不同意)
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
        //用戶同意前臺(tái)定位; 開始定位(開始更新位置)
        //系統(tǒng)默認(rèn)每一秒發(fā)送一次請(qǐng)求(不能改)
        //定位的精確度(默認(rèn)精度是最高精度/耗電;其他的設(shè)置相對(duì)不耗電)
        self.mgr.desiredAccuracy = kCLLocationAccuracyHundredMeters;
        //位置的更新頻率(減少didUpdateLocations方法的調(diào)用;模擬器沒有什么用處)
        self.mgr.distanceFilter = 10000;//單位:米
//        [self.mgr startUpdatingLocation];
        //V2:保證只發(fā)送一次請(qǐng)求(模擬器不靠譜)
        [self.mgr requestLocation];
    } else if (status == kCLAuthorizationStatusDenied) {
        //用戶沒有同意定位
        NSLog(@"用戶不同意定位....");
    }
}
//[self.mgr startUpdatingLocation];
//監(jiān)聽用戶的位置觸發(fā)下面的方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
    //獲取用戶的最新位置(數(shù)組的最后一個(gè)對(duì)象)
    CLLocation *location = [locations lastObject];
    NSLog(@"緯度%f; 經(jīng)度%f", location.coordinate.latitude, location.coordinate.longitude);
    //調(diào)用停止定位服務(wù)(不會(huì)再觸發(fā)這個(gè)方法)
    [self.mgr stopUpdatingLocation];
    //設(shè)置mgr為nil,一定只調(diào)用一次
//    self.mgr = nil;//因?yàn)檎{(diào)用requestLocation方法
    
}
//失敗獲取用戶的位置
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    NSLog(@"服務(wù)器返回失敗:%@", error);
}

@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容