25

您可以确定 LocationManager 是否有任何提供程序可用,但是可以使用 google play services location api 来完成吗?

当什么都没有启用时,实际上“访问我的位置”是关闭的,所有的 API 调用(connect()、requestLocationUpdates())都会成功,但你永远不会得到 onLocationChanged()。

必须同时使用 LocationManager 和 LocationClient 似乎很愚蠢。

我想我需要的是某种方式来知道 onLocationChanged(0永远不会被调用。

4

4 回答 4

26

我已经梳理了文档,也没有找到任何方法来使用 LocationClient 来检测是否启用了位置服务。onConnected、onDisconnected 和 onConnectionFailed 似乎与位置服务是否启用无关。

我目前正在使用 LocationClient 进行位置请求,但使用旧locationManager.isProviderEnabled(String provider)方法来检测是否启用了位置服务。这对我来说是最佳的,因为即使 LocationClient 确实提供了一种方式,它也没有区分 GPS 和网络,我真的希望能够请求用户启用 GPS。

if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
    //GPS Provider disabled
    return false;
}
于 2013-05-31T22:01:46.830 回答
12

现在有一种可靠的方法可以检测自 Google Play 服务 7.3.0 以来位置更新是否可用:

实现并注册一个LocationCallback并覆盖onLocationAvailability()或调用LocationServices.FusedLocationApi.getLocationAvailability()以检索可用性状态。如果它是错误的,那么您知道除非设备配置发生变化,否则不会传递位置更新。

这种方法实际上非常聪明:例如,如果禁用 WiFi 或设备处于飞行模式,即使始终启用网络位置提供程序,它也能够确定不会在仅 WiFi 的设备上传递位置更新。

于 2015-06-19T01:43:54.353 回答
4

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

于 2015-08-16T07:53:25.940 回答
0

这对我有用。在亚马逊平板设备与三星 s7 上测试

 if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS) {
            //Google Play services are available
    } else {
            //Google Play services are not available on this device
    }
于 2018-09-11T10:30:22.590 回答