サーチ…


構文

  1. desiredAccuracy
  2. distanceFilter
  3. requestLocation()
  4. startUpdatingLocation()
  5. allowDeferredLocationUpdates(untilTraveled:timeout :)
  6. startMonitoringSignificantLocationChanges()
  7. allowDeferredLocationUpdates(untilTraveled:timeout :)
  8. authorizedAlways
  9. 許可された場合は
  10. locationManager(_:didChangeAuthorization :)

備考

実行時に場所をシミュレートする

  1. Xcodeからアプリを起動します。
  2. デバッグバーで、[Simulate location]ボタンをクリックします。
  3. メニューから場所を選択してください。

場所のシミュレーション - デバッグ

リンクCoreLocationフレームワーク

CoreLocationフレームワークのリンク

CoreLocation機能を使用するクラスでCoreLocationモジュールをインポートします。

//Swift
import CoreLocation

//Objective-C
#import <CoreLocation/CoreLocation.h>

ロケーションサービスの使用許可を要求する

アプリの承認ステータスを確認するには:

//Swift
let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus()

//Objective-C
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

次の定数に対して状態をテストします。

//Swift
switch status {
case .NotDetermined:
    // Do stuff
case .AuthorizedAlways:
    // Do stuff
case .AuthorizedWhenInUse:
    // Do stuff
case .Restricted:
    // Do stuff
case .Denied:
    // Do stuff
}

//Objective-C
switch (status) {
    case kCLAuthorizationStatusNotDetermined:
        
        //The user hasn't yet chosen whether your app can use location services or not.
        
        break;
        
    case kCLAuthorizationStatusAuthorizedAlways:
        
        //The user has let your app use location services all the time, even if the app is in the background.
        
        break;
        
    case kCLAuthorizationStatusAuthorizedWhenInUse:
        
        //The user has let your app use location services only when the app is in the foreground.
        
        break;
        
    case kCLAuthorizationStatusRestricted:
        
        //The user can't choose whether or not your app can use location services or not, this could be due to parental controls for example.
        
        break;
        
    case kCLAuthorizationStatusDenied:
        
        //The user has chosen to not let your app use location services.
        
        break;
        
    default:
        break;
}

アプリケーションの使用中にロケーションサービスのアクセス権を取得する

使用中の使用状況ダイアログ

最も簡単な方法は、ロケーションマネージャーをルートビューコントローラーのプロパティーとして初期化し、そのviewDidLoad許可要求を置くことです。

これにより、許可を求める警告コントローラが起動します。

//Swift
let locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()

//Objective-C
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestWhenInUseAuthorization];

Info.plistに NSLocationWhenInUseUsageDescriptionキーを追加します 。この値はアラートコントローラのmessageラベルで使用されmessage

ここに画像の説明を入力


ロケーションサービスのアクセス許可を常に取得する

ここに画像の説明を入力

アプリがアクティブでなくてもロケーションサービスを使用する許可を求めるには、代わりに次の呼び出しを使用します。

//Swift
locationManager.requestAlwaysAuthorization()

//Objective-C
[locationManager requestAlwaysAuthorization];

その後、 NSLocationAlwaysUsageDescriptionキーをInfo.plistに追加します 。ここでも、値はアラートコントローラのmessageラベルで使用されmessage

ここに画像の説明を入力

GPXファイルを使用して独自のカスタム位置を追加する

ロケーションサービスを確認するには、実際のデバイスが必要ですが、テスト目的で、以下の手順でシミュレータを使用して独自の場所を追加することもできます:

  • 新しいGPXファイルをプロジェクトに追加します。
  • GPXファイルでウェイポイントを追加する
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode"> 
<!--
        Provide one or more waypoints containing a latitude/longitude pair. If you provide one
        waypoint, Xcode will simulate that specific location. If you provide multiple waypoints,
        Xcode will simulate a route visitng each waypoint.
 -->
<wpt lat="52.599878" lon="4.702029">
     <name>location name (eg. Florida)</name>
</wpt>
  • プロダクト - > Scheme - > Edit Schemeに進み、RUNにGPXファイル名としてデフォルトの場所を設定します。

バックグラウンドでの位置情報サービス

アプリケーションがバックグラウンドにあるときに標準位置サービスを使用するには、ターゲット設定のCapabilitiesタブでBackground Modesをオンにし、 Location updatesを選択する必要がありLocation updates

背景モード

または、Info.plistに直接追加します。

<key>NSLocationAlwaysUsageDescription</key>
<string>I want to get your location Information in background</string>

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

次に、CLLocationManagerをセットアップする必要があります

目標C

//The Location Manager must have a strong reference to it.
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;

//Request Always authorization (iOS8+)
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [_locationManager requestAlwaysAuthorization];
}

//Allow location updates in the background (iOS9+)
if ([_locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]) {
    _locationManager.allowsBackgroundLocationUpdates = YES;
}

[_locationManager startUpdatingLocation];

迅速

self.locationManager.delegate = self

if #available (iOS 8.0,*) {
    self.locationManager.requestAlwaysAuthorization()
}

if #available (iOS 9.0,*) {
    self.locationManager.allowsBackgroundLocationUpdates = true
}

self.locationManager.startUpdatingLocation()


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow