0

LocationManager に足を踏み入れ始めています。GPS の位置を追跡するサービスを作成し (間隔は 60000 ミリ秒以上)、アプリケーションをユーザーの位置で更新して、近くのものを見つけられるようにしました。

私が理解しているように、ユーザーは自分の設定に移動して、特定のアプリケーションの GPS を無効にすることができます。

基本的に、ユーザーに 2 つのモードを提供したいと考えています。1) GPS。2) GPS がプルできない場合、デバイスに GPS チップがない場合、またはアプリで GPS がオフになっている場合、郵便番号を入力できるようにしたいと思います (または、携帯電話基地局のルックアップに切り替えることもできます)。

太字のテキストは、私が興味を持っているものです。デバイスに GPS がないかどうかを確認するにはどうすればよいですか? ユーザーがアプリケーションの GPS を無効にしているかどうかを確認するにはどうすればよいですか?

副次的な質問: 私のサービスは 2 番目のアクティビティから開始されます。このアクティビティの onDestroy メソッドで stopService を呼び出します。1 番目のアクティビティに戻って 2 番目のアクティビティが破棄された場合でも、携帯電話の GPS アイコンが動作していることに気付きます。サービスを停止するだけで十分ですか? または、サービスの onDestroy で LocationManager を停止する必要がありますか?

4

2 に答える 2

3

ユーザーが GPS を有効にしていない場合でも、携帯電話の設定で Wi-Fi/ネットワークをロケーション ソースとして有効にすることができるため、これらのデータも使用できます。

GPS またはネットワークの最新の既知の位置をいつでも取得できます。

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

および/または

locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)

デバイスによって最後に認識された場所が保持されます。これは、アプリまたは以前に GPS を使用した他のアプリから取得できます。

実際には、プロバイダーが異なる 2 つのロケーション マネージャーを使用できます。1 つは GPS_PROVIDER を使用し、もう 1 つは NETWORK_PROVIDER を使用します。Gps はより正確ですが、通常、NETWORK_PROVIDER は屋内で機能しますが、精度が低いため、自由な空の下で屋外でのみ機能します。また、GPS は初期化後、最初の修正を取得するまでに時間がかかる場合があります (場合によっては 1 分以上) が、ネットワークはほぼ即座に位置を取得します。

この投稿を読む必要があります。非常に詳細で、サンプル コード があります。

2 番目の質問について: サービスを停止する前に、ロケーション リスナーの登録も解除する必要があります。これは、onPause または onDestroy で実行できます。

locationManager.removeUpdates(baseLocationListener)

また

locationManager.removeAllUpdates()

あなたの場合、 getLastKnowLocation() を使用しても問題ないと思います。

それにもかかわらず、GPS ステータスについて明示的に知りたい場合は、GPS ステータス リスナーを実装してから、以下のようなものを使用できます。これにより、GPS に衛星修正があるかどうかがわかりますが、前述のように、これはないと思います本当に必要です。

final class GpsStatusListener implements GpsStatus.Listener {
    public void onGpsStatusChanged(int i) {

        if (i==GpsStatus.GPS_EVENT_FIRST_FIX) {
            Log.d(AskTingTing.APP, "gpsx.fixed.");
            for (GpsSatellite sat:locationManager.getGpsStatus(null).getSatellites()) {
                Log.d(AskTingTing.APP, "gpsx.GpsStatus.Sat.fixed: " + sat.usedInFix());
            }
        }
    }
}

適切なコード サンプルについては、上記のリンクを参照してください。

于 2010-08-06T19:32:17.333 に答える
1

デバイスにGPSがない場合、またはデバイスが使用できない場合、ロケーションマネージャーによって返される値(lat、lng)はに等しくなるnullため、値を確認してから、ユーザーに位置を入力するように求めます。そのインスタンスでの場所のlat/lng値を取得するには、逆ジオコーディングをお勧めします。

副次的な質問:まだ実行中の場合は、破棄する必要があると思いますが、よくわかりません。

于 2010-08-06T19:08:21.610 に答える