【问题标题】:android check location services enabled with play services location apiandroid check location services启用了play services location api
【发布时间】:2013-05-27 14:40:42
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android location google-play-services


    【解决方案1】:

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

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

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

    【讨论】:

    • 我也觉得这很奇怪!
    • if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER) || lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {}我认为是最完整的方法。
    【解决方案2】:

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

    实现并注册LocationCallback 并覆盖onLocationAvailability() 或调用LocationServices.FusedLocationApi.getLocationAvailability() 以检索可用性状态。如果为 false,则您知道除非设备配置发生更改,否则不会发送位置更新。

    这种方法实际上非常聪明:例如,如果禁用 WiFi 或设备处于飞行模式,即使网络位置提供程序是始终启用。

    【讨论】:

    • Doc 说:返回位置数据的可用性。当 isLocationAvailable() 返回 true 时,getLastLocation(GoogleApiClient) 返回的位置将在活动 LocationRequests 指定的提示内合理地保持最新。据我了解,显示当前是否有一些位置数据可用,而不是显示位置服务是否启用。
    • 该方法只通知location不会被投递,并没有说明原因,可能由于多种原因返回false。
    • 您可以使用 SettingsClient 提前确定位置请求是否会成功并获取有关不可用的更多信息:developers.google.com/android/reference/com/google/android/gms/…
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

       if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS) {
                  //Google Play services are available
          } else {
                  //Google Play services are not available on this device
          }
      

      【讨论】:

        猜你喜欢
        • 2017-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 1970-01-01
        • 2016-05-07
        • 2016-10-11
        相关资源
        最近更新 更多