介绍
我正在编写一个类,如果它能够提供我当前的本地化一次,如果由于任何原因不能这样做,则返回默认坐标。类将在很多地方使用,所以我想让它尽可能简单地为其他人实现。所以代码看起来像
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;
}
}
});
所以现在我必须进入活动和@Override 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}
一定是有原因的,但我可能遗漏了一些非常明显的东西。