バックグラウンドで追跡しているときは青いバーを取得しますが、そうでない場合は取得しません。
私のアプリはアクティブなときは常に位置情報サービスを使用するため、iOS8ではrequestWhenInUseAuthorization
でCLLocationManager
を使用します。通常、アプリは閉じると位置情報の追跡を停止しますが、ユーザーはアプリにバックグラウンドで位置情報を追跡させるオプションを選択できます。したがって、Info.plistファイルにlocation
のUIBackgroundModes
オプションがあります。これは完全に機能します。バックグラウンドに切り替えると、アプリは位置情報の更新を取得し続け、アプリが位置情報サービスを使用していることを示す青いバーが表示されます。すべて完璧です。
しかし、問題は、ユーザーがバックグラウンドで追跡することを選択していない場合にも青いバーが表示されることです。その場合は、背景に入るときにAppDelegateからの位置情報の更新を停止するだけです。
- (void) applicationDidEnterBackground:(UIApplication *)application
{
if (!trackingInBackground) {
[theLocationManager stopUpdatingLocation];
}
}
青いバーはアプリを閉じてから1秒間しか表示されませんが、それでもかなりイライラします。
requestAlwaysAuthorization
の代わりにrequestWhenInUseAuthorization
を使用すると問題が解決することはわかっていますが、青色のバーがまったく表示されず、バックグラウンドでのトラッキングが実際にオンになっている場合も同様です。
私はすでにstopUpdatingLocation
をapplicationWillResignActive:
メソッドですが、違いはありません。
誰かがバックグラウンドで追跡するときに青いバーを取得する方法を知っていますか?
私たちは頻繁に物事をアップルに報告し、時には実際に行動します。質問で説明されているように青いバーがすぐに表示されないようにするために、AppleはiOS-9のCLLocationManager
に新しいプロパティを導入しました。知っているときに設定してくださいバックグラウンドでの場所が必要になります:
theLocationManager.allowsBackgroundLocationUpdates = YES;
または、下位互換性のある方法で:
if ([theLocationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) {
[theLocationManager setAllowsBackgroundLocationUpdates:YES];
}
swiftの場合:
if #available(iOS 9.0, *) {
theLocationManager.allowsBackgroundLocationUpdates = true
}
このプロパティが設定されていない場合、アプリの終了時に青いバーは表示されず、ユーザーの場所はアプリで利用できません。 iOS 9では、mustでプロパティを設定して、背景。
Appleの説明については WWDCビデオ を参照してください。
青色の通知を表示するにはプライバシーを追加する必要があります-場所使用中の使用法の説明 Plistファイル内(これは重要です。常に場所を使用すると、青色のバーは表示されません)
self.locationManager.delegate = self;
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.pausesLocationUpdatesAutomatically = true/false
self.locationManager.allowsBackgroundLocationUpdates = true
次に、場所にスターを付けます:locationManager.startUpdatingLocation()
また、メソッドをオーバーライドします。
func locationManager(_ manager: CLLocationManager, didUpdateLocations
locations: [CLLocation]) {
print(manager.location?.coordinate.latitude ?? "No data")
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
if status == .authorizedWhenInUse {
if CLLocationManager.isMonitoringAvailable(for: CLBeaconRegion.self) {
if CLLocationManager.isRangingAvailable() {
// do stuff
print(manager.location?.coordinate.latitude ?? "No data")
locationManager.startUpdatingLocation()
}
}
}
}
インポートを覚えておいてください!!:
import CoreLocation
また、Delegate(CLLocationManagerDelegate)も覚えておいてください。
class ViewController: UIViewController, CLLocationManagerDelegate{
青いバーはBackground Location Updates
およびリクエストwhen-in-use authorization
iOS 8の場合。
アプリを終了するとすぐに青いバー「is Using Your Location」が表示されます
ロケーションマネージャーをすぐに停止できないようです。そのため、ロケーションマネージャが完全に停止するまで、青いバーが表示されます。あるいは、キースが言ったように、それは単なるバグかもしれません。
ホームボタンを押したときにアプリが場所を使用していることをヘッダーに青いバーで表示するには、プライバシーを設定する必要があります-使用中の場所Plistファイルの使用法の説明
_ self.locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest
self.locationManager.requestWhenInUseAuthorization()
self.locationManager.pausesLocationUpdatesAutomatically = true
self.locationManager.allowsBackgroundLocationUpdates = true
_
self.locationManager.requestAlwaysAuthorization()を使用すると、青いヘッダーが表示されません
self.locationManager.requestWhenInUseAuthorization()
のみを使用する必要があります。アプリがバックグラウンドでアプリが場所を使用している場合、青いヘッダーが表示されます
ロケーションのターゲットの機能でバックグラウンドモードも設定する必要があります
以下の手順を実行すると、青色のバーがバックグラウンドモードで表示されなくなります