Java 从Google Play服务获取设备位置,无需启用wifi扫描
我的应用程序要求用户在使用某些功能之前必须在特定位置。为了验证这一点,我将使用GoogleLocationServicesAPI作为GooglePlayServices的一部分(com.Google.android.gms:PlayServicesLocation:16.0.0) 这已经运行了多年,没有任何问题,但随着谷歌最近在数据隐私方面的负面宣传,用户要求该应用程序不需要启用“谷歌定位准确性”(又称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
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);
}
}