2017-07-28 14 views
0

デバイスがターゲット領域(ジオフェンス)内にあるかどうかを検出する必要がある機能を実装しようとしています。 リージョンが領域内にある場合、フォアグラウンドまたはバックグラウンドに関係なく、何らかのタスクを実行する必要があります。iOSデバイスの再起動後に重要な場所の変更が行われないRegionMonitoring

ほとんどの部品を見つけて実装できました。

ただし、ユーザーが地域内にある間にデバイスを再起動し、重要な場所を変更しない場合があります。

この場合、iOSが内部か外部かを検出しないようです。したがって、私のアプリケーションは、タスクを実行する代わりに何もしません。

重要な場所の変更をせずにリブートした後、iOSがジオフェンス内にあるかどうかを自動的に検出する方法はありますか?

答えて

0

あなたが領域のアレイを相談している場合は、その後locationManager(_:didDetermineState:for:)locationManager(_:didEnterRegion:)locationManager(_:didExitRegion:))でキャッチしますどの返信これは、非同期の相談になります気づく、あなたが相談したい領域の上にrequestState(for:)を呼び出す必要があるので、まずにいることを取りますアカウント。

要約
var locationManager = CLLocationManager() 
// Do all proper setting for locationManager 
... 
// Here you make the asynchronous request for the state of a region 
locationManager.requestState(for: CLRegion()) // Your region 

func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) { 
    switch state { 
     case .inside: 
     // It's inside the region 
     case .outside: 
     // It's outside 
     default: 
     // It's unknown 
    } 
} 

requestState(for:)は、他のすべての代表者が同様に呼び出されるように、デバイスを移動せずに大幅な変更を強制するのと同等ですが、興味のあるあなたのポイントはlocationManager(_:didDetermineState:for:)

ソースです:https://developer.apple.com/documentation/corelocation/cllocationmanager/1423804-requeststate

+0

返信いただきありがとうございますが、このコールバック関数は、iOSデバイスが重要なロケーションの変更を検出した場合にのみ呼び出されます。 – androisojavaswift

+0

@androisojavaswift今私の新しいアプローチを試してみてください。 –

+0

詳細情報をありがとうございます。はい、あなたが正しい。あなたが提案するアプローチはうまく働き、私もあなたと同じアプローチを使用します。しかし、iOSが自動的にバックグラウンドでアプリを起動してrequestState(for :)を起動しないため、デバイスを再起動してもこのアプローチはもう機能しません。 だから私は、デバイスの再起動後、ユーザーがアプリを再起動することなく、バックグラウンドでrequestState(for :)を起動する方法を理解する必要があります。 – androisojavaswift

関連する問題