5

私の Android アプリケーションを使用して、ユーザーが特定のアクションを実行すると、現在の GPS 位置を取得してデータベースに保存するバックグラウンド サービスが開始されます。そのサービスではrequestLocationUpdates()、クラスの fromを使用し、 (サービスによって実装されている) my のが起動されるLocationManagerまで待ちます。しかし、 が起動するのを待つ最善の方法は何ですか? 単純に変数をポーリングして、設定されるまで待つ必要がありますか? 任意のヒント?onLocationChanged()LocationListeneronLocationChanged

onLocationChanged()注:他の理由により、単にデータベースに書き込むことはできません。

編集:私の状況を明確にするために、私のケースに似た例を提示できます:ユーザーがボタンを押して、myMethodオブジェクトを返すメソッドが起動されたとしましょう。次に、この myMethod で、( を使用して) GPS からの位置情報の更新を登録しrequestLocationChanged、さらにユーザーの位置情報を待ち、それを何かに使用します。つまり、myMethod場所が存在する前に戻ることはできません。onLocationChangedこの場合、どのように使用できるかわかりません。

4

4 に答える 4

3

場所が設定されると、onLocationChanged が起動されるため、変数をポーリングする必要はありません。場所を onLocationChanged に保存できないのはなぜですか?

于 2010-04-06T14:24:03.027 に答える
0

私がしているのは、メイン画面のビューを長さ不定の進行状況バーに設定し、requestLocationUpdates() を設定して、ユーザーに戻るだけです。場所が解決されるまでユーザーをブロックする必要がある場合は、コントロールとプログレス バー ビューを持たないアクティビティの上にダイアログを開くことができます。次に、onLocationChanged コールバックで、そのダイアログを閉じて、ビジネスを続行できます。

編集:あなたの質問をもう一度読みましたが、よく理解していると思います。私の最初の提案は、バックグラウンド サービスを廃止できるかどうかを確認することです。GPS API は非同期であるため、GPS ロックの待機中にアプリが応答しなくなることを心配する必要はありません。何らかの理由で送信できない場合は、メッセージ パッシング API を調べて、GPS データが利用可能なときにバックグラウンド サービスがメイン アクティビティにメッセージを送信できるようにする必要があります。開発者ガイドを参照してください

于 2010-04-06T14:28:17.277 に答える
0

質問の理解とコメントの読み方に応じて、クラスを使用して最初の場所を取得することをお勧めしgetLastKnownLocation()ますLocationManageronLocationChangedイベント登録も。これで、フロント エンドで実行しながら、このイベント ハンドラー関数で必要なことを実行できます。また、現在地が必要な場合はrequestLocationUpdates()、応答を待つことをお勧めします。アプリが何らかのタスクの準備をしている間、ユーザーを待たせるのはおそらく良い考えではありません。他の人が示唆しているように、ここで進行状況バーを使用できます。

于 2012-08-31T04:34:20.337 に答える
0

待機/通知メソッドを使用する必要があると思います。ロックオブジェクトが必要です。メソッドで lockObject.wait() を呼び出します。そして、onLocationChanged で lockObject.notify() を呼び出します。この方法では、onLocationChanged が受信されるまでメソッドは返されません。

実際には、より良い解決策は、設計を見直して、可能であればメソッドを非同期にすることです。

于 2010-04-06T16:18:36.523 に答える