-->

获得从网络提供商准确的当前位置(Get accurate current location from

2019-08-18 00:42发布

我用下面的代码在我的应用程序在网络提供商处获取当前位置:

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,我openned Foursquare的应用程序,其中就说明我目前的位置究竟我在哪里。 现在,当我回到我的应用程序,它显示准确的当前位置或者说同样的位置,其四方显示。

同样的事情发生与谷歌应用程序,如导航,地图等,

如何才能做到这一点? 如何在其他应用程序能够得到确切的位置,仅基于网络服务提供者?

完整的代码:

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();
        }
    }
}

谢谢

Answer 1:

你得到只是最后已知的位置。 您应要求从位置更新LocationManager 。 使用LocationManager.getLocationUpdates

在您LocationListeneronLocationChanged(Location location)方法,您可以检查上Location对象,该位置如何准确的,就像这样:

float accuracy=location.getAccuracy();

那么,如果这个Location是你不够准确,你可以停止从接收位置更新LocationManager使用removeUpdates()并使用所接收到的Location 。 如果Location不够准确,你可以等待一个更精确的Location ,并停止更新上后者。



文章来源: Get accurate current location from Network Provider