Google Play 的定位服务在“仅限设备”模式下不起作用

Posted

技术标签:

【中文标题】Google Play 的定位服务在“仅限设备”模式下不起作用【英文标题】:Location Services from Google Play do not work in mode "Device Only" 【发布时间】:2017-05-01 18:05:47 【问题描述】:

我有一个可以跟踪设备位置的应用。过去,我使用 android 框架位置 API。按预期工作 - 所以没有真正需要改变它。 但现在我想评估 Google 推荐使用的 Google Play 服务中的位置服务,因此我相应地更改了我的应用程序。有一些选项将来可能会派上用场。

为此,我正在关注 https://developer.android.com/training/location/change-location-settings.html 在解决了相当复杂的依赖项和要求之后,我现在有了一个工作配置。但也有问题:

第 1 部分

似乎没有使用“仅设备”模式的选项(这意味着只有 GPS 用于定位服务,而不是 WiFi 等……

如果我使用 PRIORITY_HIGH_ACCURACY、间隔 10000 和最小位移 20 请求位置更新,如果设备设置为位置模式“仅设备”,则挂起的 LocationSettingsResult 总是返回状态 RESOLUTION_REQUIRED。 解决方案是激活“高精度”模式,该模式还可以启用 WiFi 等。 但在这种模式下,位置数据会发送给 Google,这对我的一些用户来说可能是一个隐私问题。

我认为这是一个错误,因为“仅设备”模式应该足以满足请求。 在哪里提交 Google Play 服务的错​​误?不幸的是,这些问题超出了 AOSP Bug Tracker 的范围,我不知道有任何官方地方可以提交此类错误。

从服务启动位置请求时会出现另一个问题。如果现在状态是 RESOLUTION_REQUIRED 如何解决这种情况? Google 提供的解决方案需要一个活动来解决。但是在服务中没有可用于此的活动。 LocationSettingsResult 的状态对象提供对 LocationSettingsStates 对象的访问权限——但是如何提取问题的原因和可能的解决方案?

【问题讨论】:

我也面临同样的问题,此外在onActivityResult 中,当启用定位结果到Device Only 时,resultCode 被返回为RESULT_CANCELED=0 并且无法区分哪个模式位置已解决(高精度或仅限设备)顺便问一下,您是否找到了解决方案? @Mehdi Karamosly:老话题 ;-) 那时我回到非常旧的 API 来获取我的位置更新,目前仍然有效(测试到 Android 8.1) 【参考方案1】:

我遇到了完全相同的问题 - 当手机 (Moto G4) 设置为“仅设备”模式时,FusedLocationProvider 没有响应位置数据。经过一番实验,原来是手机壳挡住了GPS信号!使用像GPS Status and Toolbox 这样的应用程序确实有助于了解卫星的信号强度、是否收到修复等,

【讨论】:

不幸的是,融合的位置提供者与 Google Play 服务提供的位置提供者不同。如果您仔细阅读我的问题,您会注意到问题不是由于硬件或 GPS 信号接收不良造成的。它是由软件直接引起的——来自谷歌。他们要求必须解决这种情况,并且提供的解决意图导致也激活网络选项。【参考方案2】:

关于启动结果解析的第二期活动:LocationSettingsResult是一个Parcelable对象。因此,您可以使用 PutExtra 将其与 Intent 捆绑在一起,并将其广播到活动以启动纠正措施。下面的代码 sn-p 说明了意图的解包和状态的解析。

Status status = intent.getParcelableExtra(Constants.EXTRA_SETTINGS_UPDATE_REQD);
            switch (status.getStatusCode()) 
                case LocationSettingsStatusCodes.SUCCESS:
                    // All location settings are satisfied. The client can
                    // initialize location requests here.
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied, but this can be fixed
                    // by showing the user a dialog.

                    try 
                        // Show the dialog by calling startResolutionForResult(),
                        // and check the result in onActivityResult().
                        status.startResolutionForResult(getActivity(),
                                Constants.REQ_CODE_CHECK_SYSTEM_SETTINGS_LOC);
                     catch (IntentSender.SendIntentException e) 
                        // Ignore the error.
                    
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    // Location settings are not satisfied. However, we have no way
                    // to fix the settings so we won't show the dialog.

                    break;
            

【讨论】:

我已经处理了这个意图。该意图的解决方案是激活网络选项。仅激活 GPS 不起作用。

以上是关于Google Play 的定位服务在“仅限设备”模式下不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 上不再提供 Android 应用

Google PlayGoogle Play 服务框架安装 ( 安装 Google Play 服务框架 | 安装 Google Play 服务 | 安装 Google Play 商店 )

如何将国产android机添加到google play?

打开游戏的时候提示没有google play 服务怎么办?

不支持Google Play服务怎么办 Google Play服务不支持解决方法

我可以在安装在 Google Play 商店之外的应用上使用 Google Play 服务吗?