SwiftでGPS初期化完了を待つ

SwiftでGPSが位置を取得するコードはたくさんありますが、どのくらいで初期化かせ完了するかまでは他皆様の記事にはあまり書いていなかったので、記事としてのこしておきました。

通常は、CLLocationManager の初回イベントが発生するまで待てばいいのですが、アプリ起動時の位置をなるはやで知りたい場合があります。初回イベントが発生するまで待たせると「反応しない」とコンプレインにつながる場合もあります。

CLLocationManager に初期化完了のイベントは見当たらず。(調べきれていないかも…) 具体的なGPS初期化時間は公称されていないし、端末や処理負荷によって変わってしまうかもしれません。そこで以下のようなコードにしてみました。

	public var	NowLatitude  = 0.0
	public var	NowLongitude = 0.0	
	private var myLocMgr: CLLocationManager	
		
		var  i:Int = 0
		while( i < 30 /* 約1.5分  */ ) {
				
			if let startLoc = myLocMgr.location {
				// 自クラス用にコピー
				NowLatitude  = startLoc.coordinate.latitude
				NowLongitude = startLoc.coordinate.longitude
				break
			}
			
			Thread.sleep(forTimeInterval:3)
			i += 1
		}

とれるまでぐるぐる回すしかない。iPad 6thでは大体このくらいで収まっていました。初期GPS位置が取れなかった場合のリスクに応じて、whileの回数を調整するばよいかなと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です