6

次のコードを使用して、アプリケーションのネットワークプロバイダーから現在地を取得します。

LocationManager mgr = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean network_enabled = mgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if(network_enabled){
Location location = mgr.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

しかし、それは私の実際の場所から約300〜700メートル離れた場所を提供します。

これは、ネットワークプロバイダーから予想されます。しかし、問題は次のとおりです。

このネットワークプロバイダーのみを有効にし、GPSを使用せずに、Foursquareアプリケーションを開いて、現在地を正確に表示します。アプリケーションに戻ると、正確な現在の場所が表示されるか、Foursquareが表示したのと同じ場所が表示されます。

ナビゲーター、マップなどのGoogleアプリでも同じことが起こります。

これはどのように行うことができますか?ネットワークプロバイダーだけに基づいて、他のアプリはどのようにして正確な場所を取得できますか?

完全なコード:

public class MyLocationActivity extends Activity implements LocationListener {
    private LocationManager mgr;
    private String best;
    Location location;
    public static double myLocationLatitude;
    public static double myLocationLongitude;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mgr = (LocationManager) getSystemService(LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        best = mgr.getBestProvider(criteria, true);
        location = mgr.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        dumpLocation(location);
    }

    public void onLocationChanged(Location location) {

        dumpLocation(location);
    }

    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onPause() {

        super.onPause();
        mgr.removeUpdates(this);
    }

    @Override
    protected void onResume() {

        super.onResume();
        mgr.requestLocationUpdates(best, 15000, 10, this);
    }

    private void dumpLocation(Location l) {

        if (l != null){

            myLocationLatitude = l.getLatitude();
            myLocationLongitude = l.getLongitude();
        }
    }
}

ありがとうございました

4

1 に答える 1

3

最後の既知の場所を取得しています。から位置情報の更新をリクエストする必要がありますLocationManager。を使用しLocationManager.getLocationUpdatesます。

LocationListenerメソッドでは、次のように、この場所がどれほど正確であるかonLocationChanged(Location location)をオブジェクトで確認できます。Location

float accuracy=location.getAccuracy();

次に、これLocationが十分に正確である場合は、を使用して位置情報の更新を受信するのを停止し、受信したLocationManagerremoveUpdates()使用できますLocationLocationが十分に正確でない場合は、より正確Locationになるのを待って、後で更新を停止することができます。

于 2013-03-26T10:18:36.953 に答える