Java 从Google Play服务获取设备位置,无需启用wifi扫描

Java 从Google Play服务获取设备位置,无需启用wifi扫描,java,android,geolocation,google-play-services,Java,Android,Geolocation,Google Play Services,我的应用程序要求用户在使用某些功能之前必须在特定位置。为了验证这一点,我将使用GoogleLocationServicesAPI作为GooglePlayServices的一部分(com.Google.android.gms:PlayServicesLocation:16.0.0) 这已经运行了多年,没有任何问题,但随着谷歌最近在数据隐私方面的负面宣传,用户要求该应用程序不需要启用“谷歌定位准确性”(又称wifi扫描)。问题是-我认为播放服务不允许我在没有它的情况下检查设置 示例代码: Locat

我的应用程序要求用户在使用某些功能之前必须在特定位置。为了验证这一点,我将使用GoogleLocationServicesAPI作为GooglePlayServices的一部分(com.Google.android.gms:PlayServicesLocation:16.0.0)

这已经运行了多年,没有任何问题,但随着谷歌最近在数据隐私方面的负面宣传,用户要求该应用程序不需要启用“谷歌定位准确性”(又称wifi扫描)。问题是-我认为播放服务不允许我在没有它的情况下检查设置

示例代码:

LocationRequest mLocationRequest = LocationRequest.create()
     .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
     .setInterval(UPDATE_INTERVAL).setFastestInterval(FASTEST_INTERVAL_SUCCESS);
LocationSettingsRequest.Builder builder =
        new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest);

SettingsClient client =  LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());

task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
    @Override
    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
        checkLastLocation(this);
    }
});

task.addOnFailureListener(this, new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        int statusCode = ((ApiException) e).getStatusCode();
        switch (statusCode) {
        case CommonStatusCodes.RESOLUTION_REQUIRED:
            try {
                ResolvableApiException resolvable = (ResolvableApiException) e;
                resolvable.startResolutionForResult(this, REQUEST_CHECK_SETTINGS);
            } catch (IntentSender.SendIntentException sendEx) {
                mHelper.handleError(e.getMessage());
            }
            break;
        case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
            mHelper.onLocationReady();
            break;
        }
    }
});
这告诉我,即使他们拒绝了提示,我的位置更新请求也会成功,但它将由其他提供商提供服务

理想情况下,我希望任务不会失败,但如果必须失败,那么我希望能够获取LocationSettingsStates,而不需要使用StartResult()对用户进行bug

API建议我应该能够调用task.getResult().getLocationSettingsStates()),但这仅在任务成功(当我不需要信息时)时有效,否则对task.getResult()的调用会生成一个ApiException(与发送到onFailure的调用相同)

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    LocationSettingsStates lss = LocationSettingsStates.fromIntent(data);
    if (lss.isLocationPresent() && lss.isLocationUsable()) {
        checkLastLocation(this);
    }
}