iOS原生定位

1、導(dǎo)入框架

CoreLocation.framework

2吠昭、添加頭文件

#import <CoreLocation/CoreLocation.h>

3喊括、聲明和代理

@interface ViewController ()<CLLocationManagerDelegate>
@property (nonatomic,strong)CLLocationManager *locationManager;
@end

4、初始化

_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
_locationManager.distanceFilter = kCLDistanceFilterNone;

5矢棚、開始定位

- (void)startLocation {
    if (IOS8) {
        // 由于iOS8中定位的授權(quán)機制改變, 需要進行手動授權(quán)
        [_locationManager requestAlwaysAuthorization];
        [_locationManager requestWhenInUseAuthorization];
    }
    [_locationManager startUpdatingLocation];
}

6郑什、代理回調(diào)

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    
    NSLog(@"%@",[NSString stringWithFormat:@"經(jīng)度:%3.5f\n緯度:%3.5f",newLocation.coordinate.latitude,newLocation.coordinate.longitude]);
    
    // 獲取當(dāng)前所在的城市名
    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    //根據(jù)經(jīng)緯度反向地理編譯出地址信息
    [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *array, NSError *error)
     {
         if (array.count > 0) {
             
             CLPlacemark *placemark = [array objectAtIndex:0];
             
             //獲取城市
             NSString *city = placemark.locality;
             if (!city) {
                 //四大直轄市的城市信息無法通過locality獲得,只能通過獲取省份的方法來獲得(如果city為空蒲肋,則可知為直轄市)
                 city = placemark.administrativeArea;
             }
             
             NSLog(@"city = %@", city);
             NSLog(@"dic = %@",placemark.addressDictionary);

         } else if (error == nil && [array count] == 0) {
             
             NSLog(@"No results were returned.");
             
         } else if (error != nil) {
             
             NSLog(@"An error occurred = %@", error);
             
         }
                  
     }];
    
    //系統(tǒng)會一直更新數(shù)據(jù)蘑拯,直到選擇停止更新,因為我們只需要獲得一次經(jīng)緯度即可兜粘,所以獲取之后就停止更新
    [manager stopUpdatingLocation];
    
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    
    [manager stopUpdatingLocation];

    NSString *errorString;
    NSString *alterTitle;
    NSLog(@"Error: %@",[error localizedDescription]);

    switch([error code]) {
        case kCLErrorDenied:
            //Access denied by user
            errorString = @"請在系統(tǒng)設(shè)置中開啟定位服務(wù)\n(設(shè)置>隱私>定位服務(wù))";
            alterTitle  = @"定位服務(wù)未開啟";
            break;
        case kCLErrorNetwork:
            //Probably temporary...
            errorString = @"網(wǎng)絡(luò)未開啟,請檢查網(wǎng)絡(luò)設(shè)置";
            alterTitle  = @"提示";
            break;
        default:
            errorString = @"發(fā)生位置錯誤";
            alterTitle  = @"提示";
            break;
    }
    
    UIAlertView *locationFailAlert = [[UIAlertView alloc] initWithTitle:alterTitle message:errorString delegate:self cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil];
    [locationFailAlert show];
}

注意事項:

1申窘、用戶隱私的保護

在iOS8中,定位服務(wù)發(fā)生了變化孔轴,需要用戶授權(quán)剃法。

在工程info.plist文件中添加下面值:

<key>NSLocationUsageDescription</key>
<string>需要您的同意,才能訪問位置</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要您的同意,才能在使用期間訪問位置</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>需要您的同意,才能始終訪問位置</string>

2、獲取應(yīng)用當(dāng)前的定位服務(wù)狀態(tài)

// 確定用戶的位置服務(wù)是否啟用  
[CLLocationManager locationServicesEnabled]

// 位置服務(wù)是在設(shè)置中禁用 
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末路鹰,一起剝皮案震驚了整個濱河市贷洲,隨后出現(xiàn)的幾起案子收厨,更是在濱河造成了極大的恐慌,老刑警劉巖优构,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诵叁,死亡現(xiàn)場離奇詭異,居然都是意外死亡钦椭,警方通過查閱死者的電腦和手機拧额,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玉凯,“玉大人势腮,你說我怎么就攤上這事÷停” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵泪幌,是天一觀的道長盲厌。 經(jīng)常有香客問我,道長祸泪,這世上最難降的妖魔是什么吗浩? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮没隘,結(jié)果婚禮上懂扼,老公的妹妹穿的比我還像新娘。我一直安慰自己右蒲,他們只是感情好阀湿,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瑰妄,像睡著了一般陷嘴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上间坐,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天灾挨,我揣著相機與錄音,去河邊找鬼竹宋。 笑死劳澄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜈七。 我是一名探鬼主播秒拔,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宪潮!你這毒婦竟也來了溯警?” 一聲冷哼從身側(cè)響起趣苏,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎梯轻,沒想到半個月后食磕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡喳挑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年彬伦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伊诵。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡单绑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出曹宴,到底是詐尸還是另有隱情搂橙,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布笛坦,位于F島的核電站区转,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏版扩。R本人自食惡果不足惜废离,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望礁芦。 院中可真熱鬧蜻韭,春花似錦、人聲如沸柿扣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窄刘。三九已至窥妇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娩践,已是汗流浹背活翩。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翻伺,地道東北人材泄。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像吨岭,于是被迫代替她去往敵國和親拉宗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容