3

または別の方法で尋ねられます

[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]

[CLLocationManager isRangingAvailable]

異なる値を返すことがありますか?

4

2 に答える 2

2

[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]が返さNOれ、 [CLLocationManager isRangingAvailable] が返されるケースが 1 つありYESます。

Background App Refresh がオフになっている場合は、[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]が返されNOます。

Apple のLocation and Maps Programming Guideの「Determining the Availability of Region Monitoring」セクションに次のように記載されています。

地域の監視を試みる前に、現在のデバイスで地域の監視がサポートされているかどうかをアプリで確認する必要があります。リージョンの監視が利用できない理由は次のとおりです。

  • デバイスには、領域の監視をサポートするために必要なハードウェアがありません。
  • ユーザーは、リージョン モニタリングを使用する権限をアプリに拒否しました。
  • ユーザーが設定アプリで位置情報サービスを無効にしました。
  • ユーザーは、デバイスまたはアプリの設定アプリでアプリのバックグラウンド更新を無効にしました。
  • デバイスが機内モードになっており、必要なハードウェアの電源を入れることができません。

(4 番目の箇条書きを太字にしたのは、それが私が話している場合だからです。)

ただし、レンジングはフォアグラウンド アクティビティにすぎないため、Background App Refresh の設定は重要ではありません。

この 1 つのケースでは、リージョン モニタリングは利用できませんが、レンジングは利用できます。

注:現在、App のバックグラウンド更新を有効にすると が[[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]返されますYESが、監視を開始すると通知を受け取ることはなく、呼び出すとCLLocationManager のデリゲートで呼び出されますrequestStateForRegion:locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)errorエラー メッセージは、「操作を完了できませんでした」になります。エラーコードは 4 で、経由で に変換さCLError.hkCLErrorRegionMonitoringDeniedます。

[[CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]Apple が次の数回のアップデートで誤検知を修正してくれることを願っています。

于 2014-04-07T19:03:25.557 に答える