您可以确定是否有任何提供商可以使用LocationManager,但是可以使用google play services location api吗?
如果没有启用任何内容,实际上“访问我的位置”已关闭,所有API调用(connect(),requestLocationUpdates())都会成功,但您永远不会获得onLocationChanged()。
看起来很傻,必须同时使用LocationManager和LocationClient。
我想我需要的是一些知道onLocationChanged的方法(0将从不被调用。
答案 0 :(得分:26)
我已经梳理了文档,也没有找到任何方法来使用LocationClient来检测是否启用了位置服务。 onConnected,onDisconnected和onConnectionFailed似乎与是否启用了位置服务无关。
我目前正在使用LocationClient执行位置请求,但使用旧的locationManager.isProviderEnabled(String provider)
方法来检测是否启用了位置服务。这对我来说是最佳的,因为即使LocationClient确实提供了一种方式,它也没有区分GPS和网络,我真的希望能够请求用户启用GPS。
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
//GPS Provider disabled
return false;
}
答案 1 :(得分:12)
现在有一种可靠的方法可以检测自Google Play Services 7.3.0以来是否有可用的位置更新:
实施并注册LocationCallback
并覆盖onLocationAvailability()
或致电LocationServices.FusedLocationApi.getLocationAvailability()
以检索可用性状态。如果它是错误的,那么您知道除非设备配置发生变化,否则不会传递位置更新。
此方法实际上非常智能:例如,如果禁用WiFi或设备处于飞行模式,即使网络位置提供商处于飞行模式,它也能够确定在仅WiFi设备上不会传送位置更新始终启用。
答案 2 :(得分:0)
这对我有用。在Amazon平板设备和Samsung s7上进行了测试
if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS) {
//Google Play services are available
} else {
//Google Play services are not available on this device
}