介绍为什么Activity没有为权限(onRequestPermissionsResult)提供onActivityResult(...)回调?
我写类,提供了我目前的定位只有一次,如果其能,并返回默认的坐标系下,如果不能以任何理由这样做。类将在许多地方使用,所以我想尽可能简单地为其他人实现。所以,代码看起来像
LocationFinder locationFinder = new LocationFinder(this);
locationFinder.setLocationResolvedCallback(new LocationFinder.LocationResolvedCallback() {
@Override
public void onLocationFound(double latitude, double longitude) {
Log.e("Activity", latitude + " " + longitude);
}
});
locationFinder.findCurrentLocation();
但如果位置设置关掉了,我有权要求用户将其打开的情况下。
task.addOnFailureListener(activity, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
int statusCode = ((ApiException) e).getStatusCode();
switch (statusCode) {
case CommonStatusCodes.RESOLUTION_REQUIRED:
try {
// Show the dialog and check result
ResolvableApiException resolvable = (ResolvableApiException) e;
resolvable.startResolutionForResult(activity, REQUEST_LOCATION_SETTINGS);
} catch (IntentSender.SendIntentException sendEx) {}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
break;
}
}
});
所以现在我必须进入活动,并@覆盖onActivityResult(),从活动水平,这使得我的类不是独立处理它。
我写的方法处理我LocationFinder
public void onActivityResult(int requestCode, int resultCode) {
if (REQUEST_LOCATION_SETTINGS == requestCode) {
if (resultCode == Activity.RESULT_OK) {
requestCurrentLocation();
} else {
locationResolvedCallback.onLocationFound(DEFAULT_LAT, DEFAULT_LONG);
}
}
}
内结果代码,但我还是要@Override使用这个类的任何活动,并从中调用此方法。
所以我的问题是。
为什么android架构师没有提供onActivityResult(...)回调,因为他们在权限的情况下呢?所以我可以从一个类内仅仅有参考活性处理任何请求像
activity.onActivityResultCallback(...){///code}
必须有一个原因,但我可能失去了一些东西很明显。