介紹爲什麼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}
必須有一個原因,但我可能失去了一些東西很明顯。