如何解决除非执行 mSettingsClient.checkLocationSettings,否则无法获取 locationSettings 的 getStatusCode
有没有办法知道 LocationSettingsstatusCodes 是否等于 RESOLUTION_required 而不必一直调用 mSettingsClient.checkLocationSettings ?可能来自 onLocationChanged 侦听器的位置对象?
mSettingsClient.checkLocationSettings(mLocationSettingsRequest).addOnSuccessListener(mActivity,new OnSuccessListener<LocationSettingsResponse>() {
@Override
public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
Log.i(this.getClass().getName(),"Location settings ok");
mFusedProviderClient.requestLocationUpdates(mLocationRequest,mLocationCallback,Looper.myLooper()).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
}
});
}
}).addOnFailureListener(mActivity,new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
int statusCode = ((ApiException) e).getStatusCode();
if(statusCode == LocationSettingsstatusCodes.RESOLUTION_required){
//Location settings not satisfied.
try {
// Cast to a resolvable exception.
ResolvableApiException resolvable = (ResolvableApiException) e;
resolvable.startResolutionForResult(
mActivity,AppCommand.REQUEST_GOOGLE_ACCURACY);
} catch (IntentSender.SendIntentException ex) {
Log.e(this.getClass().getName(),"SendIntentException " + e.getLocalizedMessage());
}
}
Log.e(this.getClass().getName(),"Check location permission Failed: " +e.getLocalizedMessage());
}
}
);
解决方法
如果 LocationSettingsStatusCodes 等于 RESOLUTION_REQUIRED
这不是真的。
LocationSettingsStatusCodes
不 等于 RESOLUTION_REQUIRED
。
LocationSettingsStatusCodes
是对失败异常处理机制的封装,但实际过程中可能会出现其他异常,我们无法保证还有哪些情况会导致权限检查失败。
当您尝试获取位置时,您不必一直检查位置设置。 mSettingsClient.checkLocationSettings
和 mFusedProviderClient.requestLocationUpdates
这两个调用可以分别调用。由于它们是异步回调,因此请确保先调用 checkLocationSettings,然后调用 requestLocationUpdate。
一个建议是在片段或活动的 onCreate()
和 onResume()
中调用 checkLocationSettings。并在需要时调用 requestLocationUpdates()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。