LocationRequest优先级的奇怪行为

时间:2018-11-20 06:57:31

标签: android location android-gps google-location-services

所以我有一个应用。这取决于用户位置。正如我所期望的,在许多设备上它运行良好。三星s8存在问题,我检查了来自不同用户和需要位置的不同应用的4个真实s8,并且那里存在问题。 但是现在我的小米mi a1(带有干净的android)获得了android安全更新(11月8.1日),并且遇到了与s8相同的问题。

问题: 我在设备的设置中关闭了位置服务。我启动了我的应用程序,或者需要位置的其他应用程序(不是Google地图,它的确很棒)。 我得到默认系统对话框以打开位置服务。我按“确定”,一次它启动所有来源的位置服务,另一次它仅启动gps。 “仅GPS”的效果非常差,我等了一两分钟,它没有给出我的位置,也没有在地图上设置蓝点。我关闭位置并关闭应用程序,再次打开此对话框,然后单击“确定”,它将启动所有源,然后我立即获得位置。

据我了解,将在开始位置服务上设置的模式取决于LocationRequest的优先级。那么,为什么要一次将模式设置为“所有源”,而一次将模式设置为“仅GPS”,则其大约为LocationRequest.PRIORITY_HIGH_ACCURACY。如果我尝试在所有检查过的设备上使用LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY(这是s8的默认设置),它将启动“ wifi和其他网络”模式,但始终处于同一模式。

我使用FusedLocationClient。 我的代码来启动系统对话框:

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .addLocationRequest(getLocationRequest());
        builder.setAlwaysShow(true);
        SettingsClient client = LocationServices.getSettingsClient(this);
        Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
        task.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                if (e instanceof ResolvableApiException) {
                    try {
                        // Show the dialog by calling startResolutionForResult(),
                        // and check the result in onActivityResult().
                        ResolvableApiException resolvable = (ResolvableApiException) e;
                        resolvable.startResolutionForResult(MapsActivity.this,
                                REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException sendEx) {
                        // Ignore the error.
                        if (sendEx.getMessage() != null) {
                            Crashlytics.logException(new RuntimeException("startGpsService: " + sendEx.getMessage()));
                        }
                    }
                }
            }
        });

还有我的LocationRequest:

if (mLocationRequest == null) {
            mLocationRequest = new LocationRequest();
            if (Build.MANUFACTURER.toLowerCase().contains("samsung") &&
                    Build.MODEL.toLowerCase().contains("sm-g95")) {
                mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
            } else {
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
            }
            mLocationRequest.setInterval(2000);
            mLocationRequest.setFastestInterval(1000);
        }
        return mLocationRequest;

很高兴收到任何建议。


更新,我进行了一些测试,这是日志:

2018-11-20 09:56:11.055 29850-29850 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 09:56:29.554 30111-30111 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
2018-11-20 09:56:48.847 30309-30309 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 09:57:30.645 30647-30647 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
2018-11-20 09:57:58.354 30908-30908 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 09:58:16.632 31159-31159 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
2018-11-20 09:59:57.753 1665-1665 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 10:00:14.176 2200-2200 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 10:00:30.406 2963-2963 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 10:00:45.215 3398-3398 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled

所有时候,当我遇到“未启用位置信息提供程序”时,都会用onActivityResult进入(requestCode == REQUEST_CHECK_SETTINGS && resultCode == RESULT_CANCELED),并打开“仅设备”模式。

它似乎取决于我的手指在“是”按钮上的确切位置。 附加问题:是否可以为系统“打开位置”对话框创建自定义视图?

0 个答案:

没有答案