Android获取位置无法正常工作

Android获取位置无法正常工作,android,gps,location,locationmanager,Android,Gps,Location,Locationmanager,我试图得到的位置和代码工作,但它不能正常工作。这是我的密码 // Get the location manager LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String bestProvider = locationM

我试图得到的位置和代码工作,但它不能正常工作。这是我的密码

    // Get the location manager
    LocationManager locationManager = (LocationManager)                 
    getSystemService(LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String bestProvider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(bestProvider);

    try {
        lat =  (int)Math.round((location.getLatitude () * 1e6) ) ;
        lon =   (int)Math.round((location.getLongitude() * 1e6) ) ;
    }
    catch (NullPointerException e){
        lat = -1;
        lon = -1;
    }

问题是,当我使用foursqure或facebook时,他们直接获取位置,但我的应用程序返回-1,-1(有时),有时它会准确地找到位置。可能存在什么问题,或者如何改进以使当前位置更好??谢谢

您应该实现LocationListerner并请求位置更新。获得修复后,可以删除位置更新。您可以在

上阅读更多信息。对getLastKnownLocation的调用有时返回null,如中所指定。因此,有时该代码确实会产生lat=lon=-1。此外,getBestProvider是确定最符合给定条件的提供者的一种方法。因为您没有指定任何标准,所以逻辑上的结论是所有提供者都是一样好的,因此结果可能是随机的。最后,请注意lat=-1和lon=-1是一个有效的位置,所以一般来说,这不是标记错误的好方法

正如在这里的另一个答案中所建议的,您应该实现。然后就有了使用哪些提供者的问题。我的方法是全部使用它们,并使用一个简单的卡尔曼滤波器来处理这样一个事实,即不同的提供商在不同的时间具有不同的精度水平。我在这里发布了我用于此的简单卡尔曼滤波器