0

iOS CLLocationManager APIstartmonitoringsignificantlocationchangesは、500 メートル以上などの大きな変化があったときにアプリに通知します。

しかし、ユーザー/デバイスが新しい都市に入ったときにのみアプリが通知されるように、アプリで必要です。閉じた状態の場合、アプリは自動的に開きます。

注: マップ/ナビゲーション アプリケーションではないため、アプリでユーザーの位置データを監視し続け、最後にデバイスのバッテリーを消耗させたくありません。

いくつかの解決策を提案してください。

4

2 に答える 2

1

アプリケーションを実行します。(コメントでなくて申し訳ありませんが、コメントするには長すぎます)。

以下の詳細を参照してください (Apple のドキュメントから)

地域の監視を開始するには、適切な地域オブジェクトを構成し、それをロケーション マネージャーの startMonitoringForRegion: メソッドに渡します。iOS では、登録されたリージョンはアプリの起動間で維持されます。iOS アプリが実行されていないときにリージョン境界の交差が発生した場合、システムはイベントを処理できるようにバックグラウンドで自動的に起動 (または再起動) します。この場合、アプリケーション デリゲートの application:didFinishLaunchingWithOptions: メソッドに渡されるオプション ディクショナリには、位置関連のイベントが原因でアプリが起動されたことを示すキー UIApplicationLaunchOptionsLocationKey が含まれています。再起動プロセス中に、ロケーション マネージャー オブジェクトを再作成し、地域関連のイベントを処理できるデリゲートを割り当てる必要があります。あなたがそれをした後、システムは、アプリが起動された地域の通知を配信します。以前に構成したすべてのリージョンは、作成したロケーション マネージャー オブジェクトの monitoringRegions プロパティで使用できるようになります。

于 2015-04-13T15:01:40.730 に答える
0

CLLocationManager クラスのメソッドが必要だと思います:

- (void)startMonitoringForRegion:(CLRegion *)region

パラメータ region
監視する境界を定義する領域オブジェクト。このパラメーターは nil であってはなりません。説明 監視する地域ごとに、このメソッドを 1 回呼び出す必要があります。同じ識別子を持つ既存のリージョンが既にアプリによって監視されている場合、古いリージョンは新しいリージョンに置き換えられます。このメソッドを使用して追加したリージョンは、アプリ内のすべてのロケーション マネージャー オブジェクトによって共有され、monitoredRegions プロパティに保存されます。

リージョン イベントは、デリゲートの locationManager:didEnterRegion: および locationManager:didExitRegion: メソッドに配信されます。エラーが発生した場合、ロケーション マネージャーは代わりにデリゲートの locationManager:monitoringDidFailForRegion:withError: メソッドを呼び出します。

アプリは一度に最大 20 のリージョンを登録できます。地域の変更をタイムリーに報告するために、地域監視サービスにはネットワーク接続が必要です。

于 2015-04-13T13:58:46.533 に答える