【问题标题】:Google Location Services getBestProvider will return null even though all location services are enabled即使启用了所有位置服务,Google 位置服务 getBestProvider 也会返回 null
【发布时间】:2013-06-21 01:59:49
【问题描述】:

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

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

【问题讨论】:

  • 我猜你也在使用

标签: android google-maps android-location


【解决方案1】:

无论您使用哪个提供商 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。

【讨论】:

  • 这就是解决方案。我不得不在提供者上调用 requestLocationUpdates。
  • getLastKnownLocation 返回 LAST KNOWN 位置,如果您想要 CURRENT 位置,您显然必须请求更新!如果您想要一个位置,请使用requestSingleUpdate。使用requestLocationUpdates0, 0 将触发定期更新并耗尽电池!将日志行添加到 onLocationChanged 以查看它被调用的频率。
  • 我将对其进行测试并相应地编辑我的答案。谢谢。
【解决方案2】:

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

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)

【讨论】:

  • 您上面提到的答案已包含在我的答案中。不管你选择哪一个,你能把这篇文章标记为已回答吗?谢谢
  • 事实证明这不是解决方案。我刚刚注意到这是您答案的一部分。
  • 悉达多有正确的解决方案。我只需要拨打 GPS、NETWORK 和 PASSIVE 提供商的电话。
【解决方案3】:

我建议你使用新的 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

【讨论】:

    猜你喜欢
    • 2015-08-03
    • 2023-03-31
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多