-1

そのため、現在の場所からの距離に応じて、監視対象の地域から BeaconRegion を削除する方法を探していました。センターのプロパティを使用できますが、何かが足りないと思います...緯度/経度の値が有効ではないため...

po [region center]
(latitude = 0.0000000000000000000000000000000000000000000000000000000033891907065820605, longitude = 0.000000000000000000000000000000000000059293723668713039) 

con currentLocation に応じて BeaconRegion を削除するにはどうすればよいですか?

4

2 に答える 2

2

CLBeaconRegionはい、ユーザーの場所に応じて監視を停止できます。 しかし、あなたが発見したようにcenter、このオブジェクトのプロパティはそれを行うのに役立ちません (理由の説明については、@ Daij-Djan の回答を参照してください)。

あなたが望む典型的な方法はCLLocationManager、次のように、ビーコン監視を設定すると同時にを使用して、重要な場所の変更を受信するように設定することです。

[locationManager startMonitoringSignificantLocationChanges];

次に、以下のようなメソッドを に追加して、ユーザーが場所を大幅に変更するたびにコールバックを取得しますdelegateCLLocationManager

- (void)locationManager:(CLLocationManager *)locationManager
      didUpdateLocations:(NSArray *)locations {
   CLLocation* location = [locations lastObject];
   NSLog(@"latitude %+.6f, longitude %+.6f\n",
          location.coordinate.latitude,
          location.coordinate.longitude);
   // TODO: change the monitored beacon regions depending on the
   // location.coordinate.latitude and location.coordinate.longitude     
   }
}

これを機能させるには、位置情報サービスがアプリに対して承認されていることを確認し、NSLocationAlwaysUsageDescriptionキーに対応する文字列を plist に入れる必要があることに注意してください。ただし、とにかくビーコンを監視するために必要なチェックは同じです。

if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [locationManager requestAlwaysAuthorization];
}

重要な場所の変更の詳細については、 https ://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html を参照して ください。

于 2015-05-17T21:00:48.290 に答える