3

即使地图应用程序显示正确的位置,位置服务 getBestProvider 调用也会返回 null。FINE_LOCATION 和 COARSE_LOCATION 的权限在清单中。

public static Location getLocation(Context context) {
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    Location myLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false));
    return myLocation;
}

任何帮助将不胜感激,因为这是我第一次使用定位服务。先感谢您。

4

3 回答 3

4

尝试使用 locationmanager.getBestProvider() 的插入,看看它现在是否有效:

String locationProvider = LocationManager.NETWORK_PROVIDER;
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);

此外,如果您将 false 传递给 getBestProvider() 它将返回最佳提供程序,无论它是否打开,它仅取决于您的条件,因此如果您没有手动启用您的全球定位系统。

您可能需要检查此链接: http: //developer.android.com/reference/android/location/LocationManager.html#getBestProvider(android.location.Criteria, boolean)

于 2013-06-24T14:20:34.740 回答
4

无论您使用哪个提供商 GPS、NETWORK 或最好的,都遵循从本地(在设备上)缓存中获取位置的相同原则。

试试这个实验。改变你的physical位置(四处走动,离你现在的位置大约 200m)并加载谷歌地图,突然间你的应用程序也会返回正确的坐标。那是因为谷歌地图知道如何触发本地缓存更新。我(幸运的是)找到了触发缓存更新的方法。

只需在您的 getLastKnownLocation 和魔术发生之前调用它。

HomeScreen.getLocationManager().requestLocationUpdates(
            LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
            }
            @Override
            public void onProviderEnabled(String provider) {
            }
                @Override
            public void onProviderDisabled(String provider) {
            }
            @Override
            public void onLocationChanged(final Location location) {
        }
    });

或使用 LocationClient。用于位置更新的新 API。

于 2013-06-24T15:01:00.960 回答
0

我建议你使用新的 location api,你可以在 google_play_services_lib ( https://github.com/chrulri/google-play-services_lib ) 中找到它。只需将其作为 android 库项目添加到您的项目中即可。这个库的最大优点是您不必处理 GPS 和 NETWORK 的东西,它会自动决定使用哪一个。

在此处阅读更多信息:

https://developer.android.com/google/play-services/location.html

于 2013-06-24T14:56:31.653 回答