即使启用了所有位置服务,Google位置服务getBestProvider也将返回null

时间:2013-06-24 14:09:42

标签: android google-maps android-location

即使地图应用显示正确的位置,位置服务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;
}

任何帮助都会非常感激,因为这是我第一次使用位置服务。提前谢谢。

3 个答案:

答案 0 :(得分:4)

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

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

此外,如果你将false传递给getBestProvider(),它将返回最好的Provider,无论它是否打开,它只取决于你的Criteria,所以它可能会返回null,例如,如果你没有手动启用GPS。

您可以查看以下链接:http://developer.android.com/reference/android/location/LocationManager.html#getBestProvider(android.location.Criteria, boolean)

答案 1 :(得分:4)

无论您使用GPS,NETWORK或哪种提供商,所有提供的工作都基于从本地(设备上)缓存获取位置的相同原则。

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

在你的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。

答案 2 :(得分:0)

我建议您使用新的位置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

相关问题