0

これは、リスナーを追加せずに最後の既知の場所を取得するために使用するコードです。バッテリーを消耗させたくないので、以下を使用しました。

public static Location getLastLoc(Context context){

    Location loc = null;

    LocationManager locationManager = (LocationManager) context
            .getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String best = locationManager.getBestProvider(criteria, true);
    //Log.i("***", best);
    if (best != null) {
        loc = locationManager.getLastKnownLocation(best);
    }
    //Sometimes getLastKnownLocation return null (new device), so I use network as default when possible. 
    if (loc == null) {
        try {
            loc = locationManager
                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return loc;
}

私は現在このコードを試していますが、最高のプロバイダーはGPSのようです。

残念ながら、私は今朝、都市Aから都市Bに移動しましたが、GPSの修正はまだありません。(ただし、GPSはオンになっています)

そのため、都市Bにいる間も旧市街Aを取得し、ネットワークの場所は都市Bを認識しています(Googleマップでテスト済み)

それで、私は正確な位置を必要としないので、どのようにして最新の修正を時間内に取得することができますか(GPSは3時間前、ネットワークは10分前です)

ありがとう

4

2 に答える 2

0

より良い答えを待っている間、私がそれを機能させたのは、最新の既知の場所が1時間以内であるかどうかを確認することだけでした。

loc = locationManager.getLastKnownLocation(best);
if ((System.currentTimeMillis() - loc.getTime()) < DateUtils.HOUR_IN_MILLIS)
    return loc;

try {
    if (locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER) != null)
        loc = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    } catch (Exception e) {
        e.printStackTrace();
    }
于 2013-01-28T11:43:51.350 に答える