1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      iOS6定位服務(wù)編程詳解-創(chuàng)新互聯(lián)

      現(xiàn)在的移動設(shè)備很多都提供定位服務(wù),使用iOS系統(tǒng)的iPhone、iPod Touch和iPad都可以提供位置服務(wù),iOS設(shè)備能提供3種不同途徑進(jìn)行定位:Wifi, 蜂窩式移動電話基站, GPS衛(wèi)星

      創(chuàng)新互聯(lián)建站主營石城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP軟件開發(fā),石城h5小程序設(shè)計搭建,石城網(wǎng)站營銷推廣歡迎石城等地區(qū)企業(yè)咨詢

      iOS不像Android系統(tǒng)在定位服務(wù)編程時,可以指定采用哪種途徑進(jìn)行定位。iOS的API把底層這些細(xì)節(jié)屏蔽掉了,開發(fā)人員和用戶并不知道現(xiàn)在設(shè)備是采用哪種方式進(jìn)行定位的,iOS系統(tǒng)會根據(jù)設(shè)備的情況和周圍的環(huán)境,采用一套最佳的解決方案。這個方案是這樣的,如果能夠接收GPS信息,那么設(shè)備優(yōu)先采用GPS定位,否則采用Wifi或蜂窩基站定位,在Wifi和蜂窩基站之間優(yōu)先使用Wifi,如果無法連接Wifi才使用蜂窩基站定位。

      總體來說GPS定位優(yōu)點是準(zhǔn)確、覆蓋面廣闊,缺點是不能被遮擋(例如:在建筑物里面收不到GPS衛(wèi)星信號)、GPS開啟后比較費(fèi)電。蜂窩基站不僅誤差比較大,而且會耗費(fèi)用戶流量費(fèi)。而Wifi定位是最經(jīng)濟(jì)實惠的。

      定位服務(wù)編程

      定位服務(wù)在iOS 6之后API沒有太大的變化,主要使用CoreLocation框架,定位時候主要使用CLLocationManager、CLLocationManagerDelegate和CLLocation。CLLocationManager是定位服務(wù)管理類它能夠給我們提供獲得設(shè)備的位置信息和高度信息,也可以監(jiān)控設(shè)備進(jìn)入或離開某個區(qū)域,它還可以幫助獲得設(shè)備的運(yùn)行方向等。CLLocationManagerDelegate是CLLocationManager類委托協(xié)議。CLLocation類是封裝了位置和高度信息。

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

      iOS6定位服務(wù)編程詳解

      選擇“不允許”,定位服務(wù)就無法獲得位置信息了,如果想改變這些設(shè)置可以在系統(tǒng)設(shè)置應(yīng)用中開啟或關(guān)閉。

      iOS6定位服務(wù)編程詳解

      我們可以關(guān)閉所有的定位服務(wù),只需要把最上面的“定位服務(wù)”開關(guān)控件關(guān)閉就可以了。下面的具體應(yīng)用也可以關(guān)閉和開啟。

      下面我們通過一個案例介紹一下使用定位服務(wù)編程,在應(yīng)用啟動時候啟動,進(jìn)入畫面時候會獲得位置信息,并顯示在對應(yīng)的文本框中,如果設(shè)備位置發(fā)送變化,也會重新會的位置信息,并更新對應(yīng)的文本框。

      iOS6定位服務(wù)編程詳解

      首先要實現(xiàn)定位服務(wù)的案例,需要為工程引入CoreLocation框架,添加具體步驟是選擇工程中的TARGETS→WhereAmI→Build Phases→Link Binary With Libraries,選擇右下角的“+”按鈕,打開框架和庫選擇對話框

      iOS6定位服務(wù)編程詳解

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

      #import 
      #import 
      #import 
      @interface ViewController : UIViewController 
      //經(jīng)度
      @property (weak, nonatomic) IBOutlet UITextField *txtLng;
      //緯度
      @property (weak, nonatomic) IBOutlet UITextField *txtLat;
      //高度
      @property (weak, nonatomic) IBOutlet UITextField *txtAlt;
      @property(nonatomic, strong) CLLocationManager *locationManager;
      @end

      在h文件中首先需要引入頭文件。然后在定義ViewController時需要聲明實現(xiàn)CLLocationManagerDelegate協(xié)議。我們還定義了CLLocationManager *locationManager屬性。

      ViewController.m的viewDidLoad代碼如下:

      - (void)viewDidLoad
      {
      [super viewDidLoad];
      //定位服務(wù)管理對象初始化
      _locationManager = [[CLLocationManager alloc] init];
      _locationManager.delegate = self;
      _locationManager.desiredAccuracy = kCLLocationAccuracyBest; ①
      _locationManager.distanceFilter = 1000.0f;  ②
      }

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

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

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

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

      - (void)viewWillAppear:(BOOL)animated
      {
      [super viewWillAppear:animated];
      //開始定位
      [_locationManager startUpdatingLocation];
      }

      調(diào)用startUpdatingLocation方法定位服務(wù)就會開啟,它根據(jù)設(shè)定的條件,不斷請求回調(diào)新的位置信息。因此開啟這個方法一定要慎重,要在最合適的時候開啟,在視圖控制器的聲明周期方法中viewWillAppear:是最合適的。與開啟服務(wù)對應(yīng)的方法是stopUpdatingLocation方法,它的調(diào)用是在視圖控制器的viewWillDisappear:方法中調(diào)用的,代碼如下:

      - (void)viewWillDisappear:(BOOL)animated
      {
      [super viewWillDisappear:animated];
      //停止定位
      [_locationManager stopUpdatingLocation];
      }

      viewWillDisappear:在視圖消失(應(yīng)用退到后臺)時調(diào)用,能夠保證最及時地關(guān)閉定位服務(wù),這是負(fù)責(zé)任的做法。在iOS 6之后請求有所變化,定位服務(wù)應(yīng)用退入臺后可以延遲更新位置信息,其中allowDeferredLocationUpdatesUntilTraveled:timeout:方法可以設(shè)置延遲更新,從而使得應(yīng)用在后臺不再更新位置信息。關(guān)閉延遲更新使用disallowDeferredLocationUpdates方法實現(xiàn)。此外,在iOS 6之后新增pausesLocationUpdatesAutomatically屬性,它能設(shè)定自動暫停位置更新,定位服務(wù)的開啟和暫停管理權(quán)交給系統(tǒng),這樣會更加合理和簡單。

      一旦定位服務(wù)開啟,并設(shè)置好了CLLocationManager委托屬性delegate后,當(dāng)用戶設(shè)備移動到達(dá)過濾距離時,就會回調(diào)委托方法,與定位服務(wù)有關(guān)的方法有兩個:

      locationManager:didUpdateLocations: 定位成功,是iOS 6新方法,替代之前的locationManager:didUpdateToLocation:fromLocation:方法;

      locationManager:didFailWithError: 定位失敗;

      實現(xiàn)CLLocationManager委托代碼如下:

      #pragma mark Core Location委托方法用于實現(xiàn)位置的更新

      - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
      {
      CLLocation * currLocation = [locations lastObject]; ①
      _txtLat.text = [NSString stringWithFormat:@"%3.5f",
      currLocation.coordinate.latitude];  ②
      _txtLng.text = [NSString stringWithFormat:@"%3.5f",
      currLocation.coordinate.longitude];  ③
      _txtAlt.text = [NSString stringWithFormat:@"%3.5f",
      currLocation.altitude];  ④
      }
      - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
      {
      NSLog(@”error: %@”,error);
      }

      在locationManager:didUpdateLocations:方法中參數(shù)locations是位置變化的集合,它按照時間變化的順序存放。如果想獲得當(dāng)前設(shè)備的位置,可以使用第①行的[locations lastObject]語句獲得集合中最后一個元素,它就是設(shè)備當(dāng)前位置了。從集合中返回的對象類型是CLLocation,CLLocation封裝了位置、高度等信息。在上面代碼中我們使用了它的兩個屬性:altitude和coordinate,altitude屬性是高度值,coordinate是封裝了經(jīng)度和緯度的結(jié)構(gòu)體CLLocationCoordinate2D,CLLocationCoordinate2D定義如下:

      typedef struct {
      CLLocationDegrees latitude; //緯度
      CLLocationDegrees longitude; //經(jīng)度
      } CLLocationCoordinate2D;

      其中l(wèi)atitude為經(jīng)度信息,longitude為緯度信息,它們都是CLLocationDegrees類型,CLLocationDegrees是使用typedef定義的double類型。

      第②行代碼中的newLocation.coordinate.latitude表達(dá)式是獲得設(shè)備當(dāng)前的緯度,第③行代碼中的newLocation.coordinate.longitude表達(dá)式是獲得設(shè)備當(dāng)前的緯度,而獲得高度可以使用第④行newLocation.altitude表達(dá)式直接獲得。

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


      名稱欄目:iOS6定位服務(wù)編程詳解-創(chuàng)新互聯(lián)
      文章路徑:http://ef60e0e.cn/article/cdooso.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        宜阳县| 河北省| 调兵山市| 革吉县| 新兴县| 余干县| 桑植县| 鄂伦春自治旗| 慈溪市| 宜宾县| 永平县| 南投县| 阳原县| 青海省| 汶川县| 马公市| 当涂县| 邵武市| 绍兴县| 新干县| 灵山县| 台州市| 赣榆县| 聂荣县| 交口县| 原平市| 长乐市| 鄱阳县| 安远县| 固原市| 介休市| 西青区| 仁怀市| 河北区| 招远市| 军事| 绿春县| 缙云县| 伊吾县| 德保县| 五家渠市|