web-dev-qa-db-ja.com

iOS8:アプリを終了するとすぐに「現在地を使用しています」という青いバーが表示される

バックグラウンドで追跡しているときは青いバーを取得しますが、そうでない場合は取得しません。

私のアプリはアクティブなときは常に位置情報サービスを使用するため、iOS8ではrequestWhenInUseAuthorizationCLLocationManagerを使用します。通常、アプリは閉じると位置情報の追跡を停止しますが、ユーザーはアプリにバックグラウンドで位置情報を追跡させるオプションを選択できます。したがって、Info.plistファイルにlocationUIBackgroundModesオプションがあります。これは完全に機能します。バックグラウンドに切り替えると、アプリは位置情報の更新を取得し続け、アプリが位置情報サービスを使用していることを示す青いバーが表示されます。すべて完璧です。

しかし、問題は、ユーザーがバックグラウンドで追跡することを選択していない場合にも青いバーが表示されることです。その場合は、背景に入るときにAppDelegateからの位置情報の更新を停止するだけです。

- (void) applicationDidEnterBackground:(UIApplication *)application
{
    if (!trackingInBackground) {
        [theLocationManager stopUpdatingLocation];
    }
}

青いバーはアプリを閉じてから1秒間しか表示されませんが、それでもかなりイライラします。

requestAlwaysAuthorizationの代わりにrequestWhenInUseAuthorizationを使用すると問題が解決することはわかっていますが、青色のバーがまったく表示されず、バックグラウンドでのトラッキングが実際にオンになっている場合も同様です。

私はすでにstopUpdatingLocationapplicationWillResignActive:メソッドですが、違いはありません。

誰かがバックグラウンドで追跡するときに青いバーを取得する方法を知っていますか?

38
fishinear

私たちは頻繁に物事をアップルに報告し、時には実際に行動します。質問で説明されているように青いバーがすぐに表示されないようにするために、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ビデオ を参照してください。

15
fishinear

青色の通知を表示するにはプライバシーを追加する必要があります-場所使用中の使用法の説明 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{
2
Alberto Bailac

青いバーはBackground Location Updatesおよびリクエストwhen-in-use authorization iOS 8の場合。

アプリを終了するとすぐに青いバー「is Using Your Location」が表示されます

ロケーションマネージャーをすぐに停止できないようです。そのため、ロケーションマネージャが完全に停止するまで、青いバーが表示されます。あるいは、キースが言ったように、それは単なるバグかもしれません。

2
PowHu

ホームボタンを押したときにアプリが場所を使用していることをヘッダーに青いバーで表示するには、プライバシーを設定する必要があります-使用中の場所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()のみを使用する必要があります。アプリがバックグラウンドでアプリが場所を使用している場合、青いヘッダーが表示されます

ロケーションのターゲットの機能でバックグラウンドモードも設定する必要があります

0
priyaranjan

以下の手順を実行すると、青色のバーがバックグラウンドモードで表示されなくなります

  • info.plistのNSLocationAlwaysUsageDescriptionを設定します
  • [機能]> [バックグラウンドモード]> [位置情報の更新]を確認します
  • コードlocationManager.requestAlwaysAuthorization()
0
mckanet