你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> iOS定位服務編程詳解(1)

iOS定位服務編程詳解(1)

編輯:IOS技巧綜合
[摘要]本文是對iOS定位服務編程詳解的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。

現在的移動設備很多都提供定位服務,使用iOS系統的iPhone、iPodTouch和iPad都可以提供位置服務,iOS設備能提供3種不同途徑進行定位:Wifi,蜂窩式移動電話基站,GPS衛星

iOS 不像Android系統在定位服務編程時,可以指定采用哪種途徑進行定位。iOS的API把底層這些細節屏蔽掉了,開發人員和用戶並不知道現在設備是采用 哪種方式進行定位的,iOS系統會根據設備的情況和周圍的環境,采用一套最佳的解決方案。這個方案是這樣的,如果能夠接收GPS信息,那麼設備優先采用 GPS定位,否則采用Wifi或蜂窩基站定位,在Wifi和蜂窩基站之間優先使用Wifi,如果無法連接Wifi才使用蜂窩基站定位。

總體來說GPS定位優點是准確、覆蓋面廣闊,缺點是不能被遮擋(例如:在建築物裡面收不到GPS衛星信號)、GPS開啟後比較費電。蜂窩基站不僅誤差比較大,而且會耗費用戶流量費。而Wifi定位是最經濟實惠的。

定位服務編程

定 位服務在iOS6之後API沒有太大的變化,主要使用CoreLocation框架,定位時候主要使用CLLocationManager、 CLLocationManagerDelegate和CLLocation。CLLocationManager是定位服務管理類它能夠給我們提供獲得 設備的位置信息和高度信息,也可以監控設備進入或離開某個區域,它還可以幫助獲得設備的運行方向等。CLLocationManagerDelegate 是CLLocationManager類委托協議。CLLocation類是封裝了位置和高度信息。

在定位服務的應用中,第一次請求獲得位置信息時候,系統會提示用戶是否允許開啟定位服務。用戶所在的位置是比較私密的信息,應用獲取這些信息用戶是有知情權和否定權的。如果應用在用戶不知情的情況下,而獲得用戶的位置信息,這在某些國家是違法的行為。

1

選擇“不允許”,定位服務就無法獲得位置信息了,如果想改變這些設置可以在系統設置應用中開啟或關閉。

2

我們可以關閉所有的定位服務,只需要把最上面的“定位服務”開關控件關閉就可以了。下面的具體應用也可以關閉和開啟。

下面我們通過一個案例介紹一下使用定位服務編程,在應用啟動時候啟動,進入畫面時候會獲得位置信息,並顯示在對應的文本框中,如果設備位置發送變化,也會重新會的位置信息,並更新對應的文本框。

3

首先要實現定位服務的案例,需要為工程引入CoreLocation框架,添加具體步驟是選擇工程中的TARGETS→WhereAmI→BuildPhases→LinkBinaryWithLibraries,選擇右下角的“+”按鈕,打開框架和庫選擇對話框

4

再添加對話框中選擇CoreLocation.framework,點擊Add按鈕後添加完成。UI設計部分我們不再介紹。我們直接看看實現代碼,其中主要代碼是視圖控制器ViewController中編寫的,其中ViewController.h代碼如下:

Cpp代碼
  1. #import<UIKit/UIKit.h>
  2. #import<CoreLocation/CoreLocation.h>
  3. #import<CoreLocation/CLLocationManagerDelegate.h>
  4. @interfaceViewController:UIViewController<CLLocationManagerDelegate>
  5. //經度
  6. @property(weak,nonatomic)IBOutletUITextField*txtLng;
  7. //緯度
  8. @property(weak,nonatomic)IBOutletUITextField*txtLat;
  9. //高度
  10. @property(weak,nonatomic)IBOutletUITextField*txtAlt;
  11. @property(nonatomic,strong)CLLocationManager*locationManager;
  12. @end

在h文件中首先需要引入<CoreLocation/CoreLocation.h> 和<CoreLocation/CLLocationManagerDelegate.h>頭文件。然後在定義ViewController 時需要聲明實現CLLocationManagerDelegate協議。我們還定義了 CLLocationManager*locationManager屬性。

ViewController.m的viewDidLoad代碼如下:

Cpp代碼
  1. -(void)viewDidLoad
  2. {
  3. [superviewDidLoad];
  4. //定位服務管理對象初始化
  5. _locationManager=[[CLLocationManageralloc]init];
  6. _locationManager.delegate=self;
  7. _locationManager.desiredAccuracy=kCLLocationAccuracyBest;①
  8. _locationManager.distanceFilter=1000.0f;②
  9. }

在viewDidLoad方法中,主要對CLLocationManager的成員變量 _locationManager進行初始化。首先使用[[CLLocationManageralloc]init]語句實例化 CLLocationManager對象。然後_locationManager.delegate=self語句設置定位服務委托為self。第① 行代碼設置desiredAccuracy屬性,它是一個非常重要的屬性,它的取值有6個常 量:kCLLocationAccuracyNearestTenMeters。精度10 米;kCLLocationAccuracyHundredMeters。精度100 米;kCLLocationAccuracyKilometer。精度1000 米;kCLLocationAccuracyThreeKilometers。精度3000米;kCLLocationAccuracyBest。設備 使用電池供電時候,最高的精度;kCLLocationAccuracyBestForNavigation。導航情況下最高精度,一般要有外接電源時才 能使用;

精度越高請求獲得位置信息的時間就越短,這就意味著設備越耗電。因此一個應用應該選擇適合它的精度,如果你的應用是一個車載導航應 用,kCLLocationAccuracyBestForNavigation是比較好的選擇,你可以使用汽車上的電瓶為設備供電。如果你的應用為徒步 旅行者提供的導航應用,kCLLocationAccuracyHundredMeters是一個不錯的選擇。

第②行代碼設置distanceFilter屬性,它是距離過濾器,它定義了設備移動更新位置信息的最小距離,它的單位是米,本例設置了1000米。

初始化CLLocationManager完成之後,需要使用startUpdatingLocation方法開始定位服務。它是在ViewController.m的viewWillAppear:方法中,代碼如下:

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved