一、簡單說明
1.cllocationmanager
cllocationmanager的常用操作和屬性
開始使用者定位- (void)startupdatinglocation;
停止使用者定位- (void) stopupdatinglocation;
說明:當調用了startupdatinglocation方法後,就開始不斷地定位使用者的位置,中途會頻繁地調用代理的下面方法
- (void)locationmanager:(cllocationmanager *)manager didupdatelocations:(nsarray *)locations;
每隔多少米定位一次
@property(assign, nonatomic) cllocationdistance distancefilter;
定位精确度(越精确就越耗電)
@property(assign, nonatomic) cllocationaccuracy desiredaccuracy;
2.cllocation
cllocation用來表示某個位置的地理資訊,比如經緯度、海拔等等
(1)經緯度
@property(readonly, nonatomic) cllocationcoordinate2d coordinate;
(2)海拔
@property(readonly, nonatomic) cllocationdistance altitude;
(3)路線,航向(取值範圍是0.0° ~ 359.9°,0.0°代表真北方向)
@property(readonly, nonatomic) cllocationdirection course;
(4)行走速度(機關是m/s)
@property(readonly, nonatomic) cllocationspeed speed;
(5)計算2個位置之間的距離
- (cllocationdistance)distancefromlocation:(const cllocation *)location方法
3.cllocationcoordinate2d
cllocationcoordinate2d是一個用來表示經緯度的結構體,定義如下
typedef struct {
cllocationdegrees latitude; // 緯度
cllocationdegrees longitude; // 經度
} cllocationcoordinate2d;
一般用cllocationcoordinate2dmake函數來建立cllocationcoordinate2d
二、代碼示例
列印檢視:
代碼說明:
1.關于代理方法
需要設定代理,通過代理告訴使用者目前的位置,有兩個代理方法:
locations參數裡面裝着cllocation對象
其中後者是一個過期的方法,在新的方法(第一個)中使用了一個數組來替代。
說明:該方法在當定位到使用者的位置時就會調用,調用比較頻繁
注意:不要使用局部變量(建立位置管理器),因為局部變量的方法結束它就被銷毀了。建議使用一個全局的變量,且隻建立一次就可以了(使用懶加載)。
2.定位的精度
3.如果發現自己的定位服務沒有打開,那麼應該提醒使用者打開定位服務功能。
4.定位服務是比較耗電的,如果是做定位服務(沒必要實時更新的話),那麼定位了使用者位置後,應該停止更新位置。
三、使用者隐私的保護
1.權限設定說明
從ios 6開始,蘋果在保護使用者隐私方面做了很大的加強,以下操作都必須經過使用者準許授權
(1)要想獲得使用者的位置
(2)想通路使用者的通訊錄、月曆、相機、相冊等
當想通路使用者的隐私資訊時,系統會自動彈出一個對話框讓使用者授權
注意:一旦使用者選擇了“don’t allow”,意味着你的應用以後就無法使用定位功能,且當使用者第一次選擇了之後,以後就再也不會提醒進行設定。
是以在程式中應該進行判斷,如果發現自己的定位服務沒有打開,那麼應該提醒使用者打開定位服務功能。
cllocationmanager有個類方法可以判斷目前應用的定位功能是否可用+ (bool)locationservicesenabled;
常用的方法:截圖告訴使用者,應該怎麼打開授權
2.開發者可以在info.plist中設定nslocationusagedescription說明定位的目的(privacy - location usage description)
說明:這裡的定位服務是基于網絡的。通常定位服務可以是基于gps、基站或者是網絡的。