2013-05-31 41 views
24

您可以确定是否有任何提供商可以使用LocationManager,但可以使用google play服务位置api吗?所有API调用(connect(),requestLocationUpdates())都会成功,但您永远不会获得onLocationChanged()。安卓支票位置服务已启用播放服务位置api

似乎很难使用LocationManager和LocationClient。

我想我需要的是一些方法来知道onLocationChanged(0将永远被调用。

回答

26

我梳理了文档,也没有发现任何方式使用LocationClient来检测,如果位置服务已启用onConnected,onDisconnected和onConnectionFailed似乎并未链接到是否启用位置服务

我目前正在使用LocationClient执行位置请求,但使用旧的locationManager.isProviderEnabled(String provider)方法来检测位置服务服务已启用,这对我来说是最合适的,因为即使LocationClient确实提供了一种方式,也没有d GPS和网络之间的消失,我真的很想要求用户启用GPS。

if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    //GPS Provider disabled 
    return false; 
} 
+2

谢谢 - 也许有人从谷歌会看到这个并修复它 – user1248322

+0

我觉得这很奇怪! – Bear

+5

'if(lm.isProviderEnabled(LocationManager.GPS_PROVIDER)|| lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){}'我认为是最完整的方法。 Doc说: – Diolor

12

现在有检测位置是否有更新可用,因为谷歌播放服务7.3.0的可靠方式:

实现并注册一个LocationCallback并覆盖onLocationAvailability()或致电LocationServices.FusedLocationApi.getLocationAvailability()取回可用状态。如果它是错误的,那么你知道位置更新不会被传递,除非设备配置中有所改变。

这种方法实际上非常聪明:例如,如果WiFi被禁用或设备处于飞行模式,即使网络位置提供商能够确定没有位置更新将在仅WiFi设备上传送始终启用。

+0

返回位置数据的可用性。当isLocationAvailable()返回true时,getLastLocation(GoogleApiClient)返回的位置将在活动LocationRequests指定的提示内合理更新。 据我了解,显示是否有一些位置数据当前可用,而不是位置服务是否启用。 – lujop

4

Google Play Services 7.0 introduced a Settins Api您可以在其中询问您需要的位置设置,然后查询是否启用或要求用户启用它们。