1

ユーザーの場所を知りたいのですが、まだオンになっていない場合は gps をオンにせずに、ユーザーがマップなどを使用している場所だけを取得したいことを意味します。

私が行った場合

locationManager.requestLocationUpdates();

それはGPSをオンにします。

私が使用する場合

locationManager.getLastKnownLocation();

これは、マップが実行されているために新しい場所があるはずであっても、常に同じ場所を返します。

アイデアはありますか?:)

4

2 に答える 2

0

使用できますPASSIVE_PROVIDERが、これは API レベル 8 でのみ導入されました。 LocationManager の Android ドキュメントから

実際に場所の修正を開始せずに場所を受信するための特別な場所プロバイダー。このプロバイダーを使用すると、実際に自分で位置情報を要求しなくても、他のアプリケーションやサービスが要求したときに位置情報の更新を受動的に受け取ることができます。このプロバイダーは、他のプロバイダーによって生成された場所を返します。getProvider() メソッドを照会して、場所の更新元を特定できます。アクセス許可 android.permission.ACCESS_FINE_LOCATION が必要ですが、GPS が有効になっていない場合、このプロバイダーは大まかな修正しか返さない可能性があります。

この方法では、位置情報の更新を直接要求するのではなく、他のアプリケーションが更新を要求したときにのみ取得します。

getLastKnownLocation()再びAndroidのドキュメントを引用する場合:

指定されたプロバイダーから取得された最後の既知の位置修正からのデータを示す Location を返します。これは、プロバイダーを開始せずに実行できます。この場所は、デバイスの電源を切って別の場所に移動した場合など、古い可能性があることに注意してください。プロバイダーが現在無効になっている場合は、null が返されます。

したがって、同じ場所を何度も取得している場合はgetLastKnownLocation、プロバイダーが無効になっている可能性があり、関数名が示すもの、つまりデバイスの最後の既知の場所を取得しているだけです。詳細については、上記の引用を読むか、Android のドキュメントを参照してください。

于 2012-06-22T15:47:59.317 に答える
0

これを試して:

実装ActivityGpsStatus.Listenerて使用する

boolean isGpsStarted= false;
public void onGpsStatusChanged(int event) {
    switch (event) {
        case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
            break;
        case GpsStatus.GPS_EVENT_FIRST_FIX:                               
            break;
        case GpsStatus.GPS_EVENT_STARTED:
            isGpsStarted = true;
            break;
        case GpsStatus.GPS_EVENT_STOPPED:
            isGpsStarted = false;
            break;
    }
}

which を使用NETWORK_PROVIDERするrequestLocationUpdatesと、WiFi とセル ポジショニングが使用されます。精度を高めるには、プログラムで WiFi をオンにします。が trueかどうかを定期的に確認してからwithisGpsStartedに切り替えます。また、再び false になった場合は、定期的な更新に戻す必要があるかどうかも確認してください。GPS_PROVIDERrequestSingleUpdateNETWORK_PROVIDERisGpsStarted

于 2012-06-22T16:24:08.607 に答える