CoreLocation架構之APP定位

來源:互聯網
上載者:User

標籤:

#import "ViewController.h"

//匯入CoreLocation庫後匯入其標頭檔

#import <CoreLocation/CoreLocation.h>

//從iOS8開始,架構的匯入也可以使用這種方式

//@import CoreLocation;

 

@interface ViewController ()<CLLocationManagerDelegate>

@property (nonatomic, strong)CLLocationManager *lm;

@end

 

@implementation ViewController

//懶載入

- (CLLocationManager *)lm

{

    if(!_lm)

    {

        //定位要使用的類

        _lm = [[CLLocationManager alloc] init];

    }

    return _lm;

}

 

- (void)viewDidLoad {

    [super viewDidLoad];

    

    

}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

 

    self.lm.delegate = self;

    //請求前台定位授權(當使用者在使用APP的時候才有許可權去使用定位許可權)

    [self.lm requestWhenInUseAuthorization];

    //請求前後台定位授權.

//    [self.lm requestAlwaysAuthorization];

    //版本適配

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >=9.0) {

    //從iOS9開始如果要使用後台定位,必須實現這個屬性為YES

        //如果請求的定位許可權是在前台定位,而需要在後台也是用定位時,可以勾選capabilities中的後台模式,但是此時會有藍條出現

        self.lm.allowsBackgroundLocationUpdates = YES;

    }

    //版本適配方法2

//    if ([self respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)])

//    {

//        [self.lm setAllowsBackgroundLocationUpdates:YES];

//    }

 

    /*

     kCLLocationAccuracyBestForNavigation導航定位

     CLLocationAccuracy kCLLocationAccuracyBest最精確定位

     CLLocationAccuracy kCLLocationAccuracyNearestTenMeters 10米內

     CLLocationAccuracy kCLLocationAccuracyHundredMeters 100米內

     CLLocationAccuracy kCLLocationAccuracyKilometer 1公裡內

     CLLocationAccuracy kCLLocationAccuracyThreeKilometers 3公裡內

    */

    //定位精度.定位精度越精確,越耗電

    self.lm.desiredAccuracy = kCLLocationAccuracyBest;

    //位置過濾,當使用者位置移動超過10米時再次定位,若位置靜止或移動小於10米則不定位.

//    self.lm.distanceFilter = 10;

    

    //開始請求使用者位置,此方法會從定位精度最差一級開始定位,若在逾時時間內定位到,則返回定位資訊,若未定位到設定的定位精度就到達逾時時間,就返回當前定位到的精度位置資訊.若逾時後使用者還未決定是否允許定位或未定位到任何位置資訊就會調用locationManager:didFailWithError:

    //但是此方法不能同時和startUpdatingLocation同時使用,並且必須實現協議方法locationManager:didFailWithError:

//    [self.lm requestLocation];

    

    //開始更新位置

    [self.lm startUpdatingLocation];

    

    //位置更新後,需要通過某種方式將更新後的位置語音總機到使用者,方法有:代理,block,通知.

}

//當位置更新後的回調方法

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

{

    NSLog(@"位置已更新");

    //停止定位

//    [manager stopUpdatingLocation];

}

 

//定位失敗

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

{

    NSLog(@"定位失敗");

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

@end

 

 

 

 

以上是我實現許可權訪問的定位,下面說一下plist檔案

這是我最終的plist檔案,裡面的前後台,前台,使用定位請求是自己加進去的;至於使用定位請求的key是:

NSLocationUsageDescription(在CLLocationManager.h檔案的第187行),至於前面的那個Privacy是系統自己加進去的,不必糾結於此;

另外,要想實現前後台都可以使用定位,還必須去工程的TARGETS裡面,選擇(第二個)Capabilities,在Capabilities中再選擇Background Modes,將開關開啟,並在其中的第二項Location updates前面打對勾;

這樣你就要可以完美運行你的工程項目了.

 

CoreLocation架構之APP定位

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.