要件:オープン市APP取得
CLLocationManagerシステムは、次の手順を使用することによって達成されます。
Info.plistのプロジェクトに以下のように1、2つのフィールドを追加します。
次のように初期化AppDelegate CLLocationManager 2.、オブジェクト:
#importを " AppDelegate.h " の#import <CoreLocation / CoreLocation.h> の#import " MainViewController.h " @interface AppDelegate()<CLLocationManagerDelegate> @property(非アトミック、強い)CLLocationManager * locationManager。 @end @implementation AppDelegate - (BOOL)アプリケーション:(のUIApplication *)アプリケーションdidFinishLaunchingWithOptions:(NSDictionaryの* )launchOptions { // アプリケーション起動後のカスタマイズのためのオーバーライドポイント。 // 判断是否有定位权限 場合([CLLocationManager locationServicesEnabled]){ // 开启定位 【self.locationManager startUpdatingLocation]; } そうでなければ{ のNSLog(@ " システムが配置されているがまだ開いていない、[セットしてください-プライバシー-マニュアル開における位置情報サービス" ); } 戻りYES; } の#pragmaマーク-標的 - (CLLocationManagerを* )locationManager { IF!(_locationManager){ // 作成CoreLocationは、管理オブジェクト CLLocationManager * locationManager = [[CLLocationManagerアロケーション]のinit]; // 権限チェックを見つけ [locationManager requestWhenInUseAuthorizationは]; // 位置決め精度を設定します [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]。 // 设置代理 locationManager。デリゲート = 自己; _locationManager = locationManager。 } 戻り_locationManagerと、 }
3.適切なエージェントCLLocationManager、次のコードを達成する方法
#pragmaマーク-プロキシアプローチ、検査のための標的許可 - (無効)locationManager:(CLLocationManager * )マネージャーdidChangeAuthorizationStatus:(CLAuthorizationStatus){ステータス 切替(ステータス){ ケースkCLAuthorizationStatusNotDetermined:{ のNSLog(@ " ユーザーはまだ認可することを決定していません" ); / / アクティブ許可 [self.locationManager requestWhenInUseAuthorization]; BREAK ; } ケースkCLAuthorizationStatusRestricted: { のNSLog(@ " 制限されたアクセス" ); // アクティブ認可 【self.locationManager requestWhenInUseAuthorization]; BREAK ; } ケースkCLAuthorizationStatusDeniedは:{ // 権限適用することはできませんアクティブターゲットを用いた方法を取得する。この時点で、 // クラスメソッドを、ロケーションサービスを開くかどうかを判定する IF ([CLLocationManager locationServicesEnabled]){ のNSLog(@ " ロケーションオープンサービスが拒否される" ); } 他{ のNSLog(@" 位置情報サービス、利用できないオフ" ); } BREAK ; } ケースkCLAuthorizationStatusAuthorizedAlways:{ のNSLog(@ " の前と許可テーブルを取得した後" ); BREAK ; } ケースkCLAuthorizationStatusAuthorizedWhenInUse:{ のNSLog(@ " 受信権限を持つ" ); BREAK ; } デフォルト: BREAK ; } } の#pragmaマーク-位置取得 - (無効)locationManager:(* CLLocationManager )マネージャ didUpdateLocations:(にNSArray * )場所{ CLLocation * newLocation = [位置lastObject]; // 決意プロセス空気 IF(newLocation.horizontalAccuracy < 0 ){ のNSLog(@ " 場所に障害が発生した、携帯電話ネットワークとポジショニングチェック" ); リターン; } // ストップ配置 【self.locationManager stopUpdatingLocation]; // 座標取得 // CLLocationCoordinate2D coor2D = newLocationを.coordinate; // のNSLog(@ "緯度:%のF、経度:%のF"、coor2D.latitude、coor2D.longitude); //は、都市、符号化オブジェクトを作成し得る CLGeocoderをジオコーダ* = [[CLGeocoder ALLOC] INIT ]; // 逆ジオコーディング [ジオコーダreverseGeocodeLocation:newLocation CompletionHandler:^(目印のにNSArray <CLPlacemark *> * _Nullable、NSError *、として_Nullableエラー){ IF(誤差=ゼロ|| placemarks.count ==!0 ){ リターン; } // 取得目印 CLPlacemark *目印= [目印の、firstObjectなど]; // のNSLog(@ "%@取得ランドマーク=、"、placeMark.locality); }]; } の#pragmaマーク-場所の失敗 - (無効)locationManager:(* CLLocationManager)マネージャーdidFailWithError:(NSError * )エラー{ // のNSLog(@ "場所に障害が発生した、携帯電話ネットワークとポジショニングをチェック"); }