2

アプリが長時間の一時停止モードから再開されると、GPS 信号が失われます。
および/またはユーザーが GPS が弱い建物に入った、アプリを再開した後。

青い点が消え、マップの中心が lat:0 long:0 (ナイジェリア-アフリカ近くの海のどこか) になります。その時点で別の GPS アプリ (Apple Maps など) を起動すると、青い点が表示されます。それほど正確ではありませんが、ドット。

ユーザーが修正できる唯一の方法は、アプリを完全に強制終了してから再起動することです。

iOS 5.x と iOS 6.x の両方で発生します。

詳細に入る前に、本当にお聞きしたいのですが、
この問題に遭遇した人はいますか??
非常に厄介ですが、ウェブのどこにもこれについて不平を言う人を見つけることができませんでした-非常に奇妙です.

私は通常のCLLocationをshowUserLocation = YESで使用しています
。魔法のようなものはなく、特別な精度の調整なども何もなく、単純なデフォルトの実装です。

アプリが再開されたときに、考えられるすべてのコンポーネントを再起動しようとしました。

showUserLocation=NO;
showUserLocation=YES;

また

[locationManager stopUpdatingLocation];
[locationManager startUpdatingLocation];

または、locationManager を解放して再度初期化しても役に立ちません。
(また、 dispatch_after を使用して遅延して再起動しようとしました)

ios で GPS 信号または CLLocation を強制的にリセットするプログラム的な方法はありますか?
関連する議論に感謝します!

4

2 に答える 2

1

デフォルトの場所が「なし」に設定されていると思うので、このタイプの問題が発生しました。

Go to 

Edite Scheme..
    |
    |
  "Run YourProjectName"  / Left Hand Side
       |
       |
  Select "Option" Tab
         |
         |
     Default Location
          |
          |
     Choose any Location such like , "London England"
于 2013-03-23T12:28:37.693 に答える
0

オブジェクトの停止/開始を試みたと言うときCLLocationManager、デリゲートで取得したコールバックが 0,0 座標を与えると言っているのですか、それとも のlocationプロパティを使用して直接場所にアクセスしようとしていますCLLocationManagerか?

私はロケーションベースのアプリに取り組んでいますが、1 つ言えることは、CLLocationManagerオブジェクトのロケーションを直接取得することは数え切れないということです。CLLocationManager位置情報を取得する唯一の信頼できる方法は、実装してクラスのコールバックに依存することです

-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

アプリでの処理方法CLLocationManager(これがユース ケースに最適または理想的であるとは言いませんが、アプリの起動/再開時にユーザーに確実な位置情報ベースのエクスペリエンスを提供できるようにします)

  1. をロケーション管理クラスにラップしCLLocationManagerます(通常はシングルトンを使用)-これはのサブクラスになる可能性がありますCLLocationManagerが、私の場合はオブジェクトをプロパティとしてNSObject持つ単なるサブクラスですCLLocationManager
  2. このシングルトンに最後の既知の有効な場所を保存し、それをディスクに書き込みます (NSUserDefaults または別の場所 - ユーザーの場所を保存することが許可されているかどうかを再確認する必要がありますがNSUserDefaults、私たちはアプリでそれを行いましたが、そうではありません承認プロセスに影響するようです)
  3. カスタム クラスで現在の位置を取得する方法を再実装しますCLLocationManager
  4. 厳密には必要ありませんが、場所を使用する必要がある複数のビュー/ページがある場合、オブザーバー モデルの実装はうまく機能します (シングルトンがCLLocationManagerデリゲートになったため、この情報をビュー コントローラーに渡す方法が必要です)。 .

上記のように、マップ ページ (またはユーザーの場所を表示している場所) で、基本的にキャッシュされた場所でマップを 1 回 ( でviewDidLoad) 更新し、デリゲート コールバックを介してマップを 1 回更新できるようにします。そのコールバックを受信したら、次に設定showsUserLocationYESます (コールバックが呼び出されない場合は、まだ有効な場所がないためshowsUserLocation、その時点で設定しても何も起こりません)。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-03-23T18:50:46.747 に答える