下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應用開發(fā)技術(shù)】iOS6定位服務編程詳解
現(xiàn)在的移動設(shè)備很多都提供定位服務,使用iOS系統(tǒng)的iPhone、iPodTouch和iPad都可以提供位置服務,iOS設(shè)備能提供3種不同途徑進行定位:Wifi,蜂窩式移動電話基站,GPS衛(wèi)星iOS不像Android系統(tǒng)在定位服務編程時,可以指定采用哪種途徑進行定位。iOS的API把底層這些細節(jié)屏蔽掉了,開發(fā)人員和用戶并不知道現(xiàn)在設(shè)備是采用哪種方式進行定位的,iOS系統(tǒng)會根據(jù)設(shè)備的情況和周圍的環(huán)境,采用一套最佳的解決方案。這個方案是這樣的,如果能夠接收GPS信息,那么設(shè)備優(yōu)先采用GPS定位,否則采用Wifi或蜂窩基站定位,在Wifi和蜂窩基站之間優(yōu)先使用Wifi,如果無法連接Wifi才使用蜂窩基站定位。總體來說GPS定位優(yōu)點是準確、覆蓋面廣闊,缺點是不能被遮擋(例如:在建筑物里面收不到GPS衛(wèi)星信號)、GPS開啟后比較費電。蜂窩基站不僅誤差比較大,而且會耗費用戶流量費。而Wifi定位是最經(jīng)濟實惠的。定位服務編程定位服務在iOS6之后API沒有太大的變化,主要使用CoreLocation框架,定位時候主要使用CLLocationManager、CLLocationManagerDelegate和CLLocation。CLLocationManager是定位服務管理類它能夠給我們提供獲得設(shè)備的位置信息和高度信息,也可以監(jiān)控設(shè)備進入或離開某個區(qū)域,它還可以幫助獲得設(shè)備的運行方向等。CLLocationManagerDelegate是CLLocationManager類委托協(xié)議。CLLocation類是封裝了位置和高度信息。在定位服務的應用中,第一次請求獲得位置信息時候,系統(tǒng)會提示用戶是否允許開啟定位服務。用戶所在的位置是比較私密的信息,應用獲取這些信息用戶是有知情權(quán)和否定權(quán)的。如果應用在用戶不知情的情況下,而獲得用戶的位置信息,這在某些國家是違法的行為。選擇“不允許”,定位服務就無法獲得位置信息了,如果想改變這些設(shè)置可以在系統(tǒng)設(shè)置應用中開啟或關(guān)閉。我們可以關(guān)閉所有的定位服務,只需要把最上面的“定位服務”開關(guān)控件關(guān)閉就可以了。下面的具體應用也可以關(guān)閉和開啟。下面我們通過一個案例介紹一下使用定位服務編程,在應用啟動時候啟動,進入畫面時候會獲得位置信息,并顯示在對應的文本框中,如果設(shè)備位置發(fā)送變化,也會重新會的位置信息,并更新對應的文本框。首先要實現(xiàn)定位服務的案例,需要為工程引入CoreLocation框架,添加具體步驟是選擇工程中的TARGETS→WhereAmI→BuildPhases→LinkBinaryWithLibraries,選擇右下角的“+”按鈕,打開框架和庫選擇對話框再添加對話框中選擇CoreLocation.framework,點擊Add按鈕后添加完成。UI設(shè)計部分我們不再介紹。我們直接看看實現(xiàn)代碼,其中主要代碼是視圖控制器ViewController中編寫的,其中ViewController.h代碼如下:#import<UIKit/UIKit.h>
#import<CoreLocation/CoreLocation.h>
#import<CoreLocation/CLLocationManagerDelegate.h>
@interfaceViewController:UIViewController<CLLocationManagerDelegate>
//經(jīng)度
@property(weak,nonatomic)IBOutletUITextField*txtLng;
//緯度
@property(weak,nonatomic)IBOutletUITextField*txtLat;
//高度
@property(weak,nonatomic)IBOutletUITextField*txtAlt;
@property(nonatomic,strong)CLLocationManager*locationManager;
@end在h文件中首先需要引入<CoreLocation/CoreLocation.h>和<CoreLocation/CLLocationManagerDelegate.h>頭文件。然后在定義ViewController時需要聲明實現(xiàn)CLLocationManagerDelegate協(xié)議。我們還定義了CLLocationManager*locationManager屬性。ViewController.m的viewDidLoad代碼如下:-(void)viewDidLoad
{
[superviewDidLoad];
//定位服務管理對象初始化
_locationManager=[[CLLocationManageralloc]init];
_locationManager.delegate=self;
_locationManager.desiredAccuracy=kCLLocationAccuracyBest;①
_locationManager.distanceFilter=1000.0f;②
}在viewDidLoad方法中,主要對CLLocationManager的成員變量_locationManager進行初始化。首先使用[[CLLocationManageralloc]init]語句實例化CLLocationManager對象。然后_locationManager.delegate=self語句設(shè)置定位服務委托為self。第①行代碼設(shè)置desiredAccuracy屬性,它是一個非常重要的屬性,它的取值有6個常量:kCLLocationAccuracyNearestTenMeters。精度10米;kCLLocationAccuracyHundredMeters。精度100米;kCLLocationAccuracyKilometer。精度1000米;kCLLocationAccuracyThreeKilometers。精度3000米;kCLLocationAccuracyBest。設(shè)備使用電池供電時候,最高的精度;kCLLocationAccuracyBestForNavigation。導航情況下最高精度,一般要有外接電源時才能使用;精度越高請求獲得位置信息的時間就越短,這就意味著設(shè)備越耗電。因此一個應用應該選擇適合它的精度,如果你的應用是一個車載導航應用,kCLLocationAccuracyBestForNavigation是比較好的選擇,你可以使用汽車上的電瓶為設(shè)備供電。如果你的應用為徒步旅行者提供的導航應用,kCLLocationAccuracyHundredMeters是一個不錯的選擇。第②行代碼設(shè)置distanceFilter屬性,它是距離過濾器,它定義了設(shè)備移動更新位置信息的最小距離,它的單位是米,本例設(shè)置了1000米。初始化CLLocationManager完成之后,需要使用startUpdatingLocation方法開始定位服務。它是在ViewController.m的viewWillAppear:方法中,代碼如下:-(void)viewWillAppear:(BOOL)animated
{
[superviewWillAppear:animated];
//開始定位
[_locationManagerstartUpdatingLocation];
}調(diào)用startUpdatingLocation方法定位服務就會開啟,它根據(jù)設(shè)定的條件,不斷請求回調(diào)新的位置信息。因此開啟這個方法一定要慎重,要在最合適的時候開啟,在視圖控制器的聲明周期方法中viewWillAppear:是最合適的。與開啟服務對應的方法是stopUpdatingLocation方法,它的調(diào)用是在視圖控制器的viewWillDisappear:方法中調(diào)用的,代碼如下:-(void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
//停止定位
[_locationManagerstopUpdatingLocation];
}viewWillDisappear:在視圖消失(應用退到后臺)時調(diào)用,能夠保證最及時地關(guān)閉定位服務,這是負責任的做法。在iOS6之后請求有所變化,定位服務應用退入臺后可以延遲更新位置信息,其中allowDeferredLocationUpdatesUntilTraveled:timeout:方法可以設(shè)置延遲更新,從而使得應用在后臺不再更新位置信息。關(guān)閉延遲更新使用disallowDeferredLocationUpdates方法實現(xiàn)。此外,在iOS6之后新增pausesLocationUpdatesAutomatically屬性,它能設(shè)定自動暫停位置更新,定位服務的開啟和暫停管理權(quán)交給系統(tǒng),這樣會更加合理和簡單。一旦定位服務開啟,并設(shè)置好了CLLocationManager委托屬性delegate后,當用戶設(shè)備移動到達過濾距離時,就會回調(diào)委托方法,與定位服務有關(guān)的方法有兩個:locationManager:didUpdateLocations:定位成功,是iOS6新方法,替代之前的locationManager:didUpdateToLocation:fromLocation:方法;locationManager:didFailWithError:定位失敗;實現(xiàn)CLLocationManager委托代碼如下:#pragmamarkCoreLocation委托方法用于實現(xiàn)位置的更新-(void)locationManager:(CLLocationManager*)managerdidUpdateLocations:(NSArray*)locations
{
CLLocation*currLocation=[locationslastObject];①
_txtLat.text=[NSStringstringWithFormat:@"%3.5f",
currLocation.coordinate.latitude];②
_txtLng.text=[NSStringstringWithFormat:@"%3.5f",
currLocation.coordinate.longitude];③
_txtAlt.text=[NSStringstringWithFormat:@"%3.5f",
currLocation.altitude];④
}
-(void)locationManager:(CLLocationManager*)managerdidFailWithError:(NSError*)error
{
NSLog(@”error:%@”,error);
}在locationManager:didUpdateLocations:方法中參數(shù)locations是位置變化的集合,它按照時間變化的順序存放。如果想獲得當前設(shè)備的位置,可以使用第①行的[locationslastObject]語句獲得集合中最后一個元素,它就是設(shè)備當前位置了。從集合中返回的對象類型是CLLocation,CLLocation封裝了位置、高度等信息。在上面代碼中我們使用了它的兩個屬性:altitude和coordinate,altitude屬性是高度值,coordinate是封裝了經(jīng)度和緯度的結(jié)構(gòu)體CLLocationCoordinate2D,CLLocationCoordinate2D定義如下:typedefstruct{
CLLocationDegreeslatitude;//緯度
CLLocationDegreeslongitude;//經(jīng)度
}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度菜鳥驛站快遞業(yè)務數(shù)據(jù)分析合同3篇
- 二零二五年度多功能木方模板設(shè)計與制造服務合同4篇
- 2025年學生就業(yè)實習合同
- 2025年名譽權(quán)質(zhì)押合同
- 2025年合作加盟代理合資經(jīng)營合同
- 二零二五版國際貨物檢驗鑒定服務合同(木材)3篇
- 2025年家居中介代理協(xié)議
- 2025年圖書分銷合作協(xié)議
- 二零二五年度木工行業(yè)技術(shù)研發(fā)合作合同4篇
- 2025年浮動抵押證明書樣本
- 化學-河南省TOP二十名校2025屆高三調(diào)研考試(三)試題和答案
- 智慧農(nóng)貿(mào)批發(fā)市場平臺規(guī)劃建設(shè)方案
- 林下野雞養(yǎng)殖建設(shè)項目可行性研究報告
- 2023年水利部黃河水利委員會招聘考試真題
- Python編程基礎(chǔ)(項目式微課版)教案22
- 01J925-1壓型鋼板、夾芯板屋面及墻體建筑構(gòu)造
- 近五年重慶中考物理試題及答案2023
- 乳腺導管原位癌
- 冷庫管道應急預案
- 《學習教育重要論述》考試復習題庫(共250余題)
- 網(wǎng)易云音樂用戶情感畫像研究
評論
0/150
提交評論