サーチ…
構文
- desiredAccuracy
- distanceFilter
- requestLocation()
- startUpdatingLocation()
- allowDeferredLocationUpdates(untilTraveled:timeout :)
- startMonitoringSignificantLocationChanges()
- allowDeferredLocationUpdates(untilTraveled:timeout :)
- authorizedAlways
- 許可された場合は
- locationManager(_:didChangeAuthorization :)
備考
リンク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