2017-12-29 14 views

答えて

0

終了すると、アップデートを取得する唯一の方法はリージョンモニタリングを使用することですが、メジャーアップデートのみを受けるため、500mで動作するかどうかは疑問です。ドキュメントから

:アプリがユーザーまたはシステムのいずれかによって終了した場合は、新しい場所 更新が到着したときに

、 システムが自動的にアプリを再起動しません。 の位置情報の配信が再開される前に、ユーザーがアプリを明示的に再起動する必要があります。アプリを に自動的に再起動させる唯一の方法は、地域監視または 重要な位置情報サービスを使用することです。ただし、ユーザーが バックグラウンドアプリの最新表示設定を無効にすると、 アプリに対してグローバルに、または具体的には、重要な変更や地域の監視イベントを含む イベントのいずれの場所でもアプリが再起動されません。 さらに、Background App Refreshがオフになっている間に、 フォアグラウンドにある場合でも、アプリは 重要な変更または地域監視イベントを受信しません。

これには十分な理由があります。まず第一に、人々はいつも「スヌープ」するアプリを望んでおらず、10のアプリを常時実行していることを想像しても良い理由があっても。パフォーマンスとバッテリ寿命の問題が発生し始めます。

EDIT この問題で多くの人が混乱しているように見えるので、ちょっとしたことを明確にしようとします。

あなたのアプリは、終了した(または実際に中断されている)間は、位置を絶えず追跡しているとは考えていません。あなたは、プライバシーの理由から、また電池を過剰に消耗しないように、これを行うことは許されていません。

アプリがフォアグラウンドにある間に、startUpdatingLocation経由で位置情報サービスを使用してデバイスの位置を監視することができます。アプリケーションにパーミッションが与えられていると仮定すると、利用可能なすべてのハードウェア(GPS、WiFi、Cellular)が使用されます。

は今のドキュメント自体から:あなたはこのサービスを開始し、アプリが中断された場合は、あなたのアプリが再び( の前景または背景のいずれかを)実行が開始されるまで

、システムは、イベントの 配信を停止します。あなたのアプリが終了した場合、新しいロケーションイベントの配信 が完全に停止します。したがって、バックグラウンドで位置イベントを受信するためにアプリに が必要な場合は、 UIBackgroundModesキー(位置値付き)をInfo.plist ファイルに含める必要があります。

このように一時停止して終了すると、本当に地域を監視し、重要な場所の変更を監視するオプションがあります。これらのどちらも特に正確であるか、頻繁ではない。この理由の1つは、GPSを使用しない位置(WiFiと携帯電話)を得るために低電力の方法しか使用しないことです。

アプリが一時停止または終了している間に正確な位置追跡や頻繁な位置追跡ができません。これは受け入れられなければならず、それに応じてアプリを設計する必要があります。

+0

お役に立てば幸いですか! –

+0

https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/handling_location_events_in_the_background?language=objc –

+0

@ user2105008 downvoteはおそらく少し厳しいですが、このような質問はたくさんあります。背景や中断している。あなたは理由を言及していないので、それを判断するのは難しいのですが、それが正当な理由であるか、あるいは単にユーザーを追跡しようとしているだけなのです。私はちょうど下の投票を与えて移動を試みることができましたが、私は少なくともその質問に答えようとしました。この場合、あなたが研究して本物であるように見える(そして私は少し厳しいかもしれない)ので、私はそれを取り除いた。それに取り組んでください。 –

0
let locationManager = CLLocationManager() 
locationManager.startMonitoringSignificantLocationChanges() 

受信者は、現在のロケーション修正を返した後、ユーザーの場所の重大な変更が検出された場合にのみ更新イベントを生成します。イベントを生成するためにdistanceFilterプロパティの値に依存しません

このサービスを開始してその後アプリケーションを終了すると、新しいイベントが到着した場合、システムは自動的にバックグラウンドにアプリケーションを再起動します。このような場合、アプリケーションデリゲートのアプリケーション(:willFinishLaunchingWithOptions :)とアプリケーション(:didFinishLaunchingWithOptions :)メソッドに渡されたオプション辞書に、ロケーションイベントのためにアプリが起動されたことを示すキーの場所が含まれています。再起動時には、依然としてロケーションマネージャオブジェクトを設定し、このメソッドを呼び出してロケーションイベントの受信を継続する必要があります。ロケーションサービスを再起動すると、現在のイベントがすぐにデリゲートに配信されます。さらに、位置情報サービスを開始する前であっても、ロケーションマネージャオブジェクトのlocationプロパティには最新の位置情報オブジェクトが設定されます。

Apps can expect a notification as soon as the device moves 500 meters or more from its previous notification. It should not expect notifications more frequently than once every five minutes. If the device is able to retrieve data from the network, the location manager is much more likely to deliver notifications in a timely manner. 

は、それは私がするとき、ロケーションサービスができないと、あなたが反対票を与えられている理由を介した場所をリフレッシュしたい

+0

私はもっと理解できるようにコードを追加できますか? –

+0

このfuncアプリケーション(_ application:UIApplication、didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)から位置の価値を取ることができますか?> Bool { // print launchOptions![UIApplicationLaunchOptionsKey.location]) trueを返します } – SuryaKantSharma

関連する問題