为了在 android M+ 中处理权限,我想编写一个类,即 PermissionHandler 类,来处理所有与权限相关的工作,这样我就可以轻松地在任何项目中使用相同的类,而无需通过只调用构造函数:
new PermissionHandler(CallingActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, new PermissionHandler.PermissionGranted() {
@Override
public void onPermissionGranted() {
doWhatever();
}
});
我的 PermissionHandler 是:
public class PermissionHandler implements ActivityCompat.OnRequestPermissionsResultCallback{
.
.
.
public PermissionHandler(AppCompatActivity callingActivity, String permission, PermissionGranted permissionGranted) {
this.permission = permission;
this.permissionGranted = permissionGranted;
this.callingActivity= callingActivity;
askForPermission();
}
private void askForPermission() {
if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)) {
showAlertDialog();
} else {
ActivityCompat.requestPermissions(callingActivity,permissionsArray, PERMISSION_REQUEST);
}
} else {
permissionGranted.onPermissionGranted();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
permissionGranted.onPermissionGranted();
} else {
onPermissionIsNotGranted();
}
break;
}
}
}
我的问题是 onRequestPermissionsResult
应该在调用 ActivityCompat.requestPermissions(callingActivity,permissionsArray, PERMISSION_REQUEST)
时被调用,但从未被调用。
我发现这是由于 android 调用 callingActivity.onRequestPermissionsResult
,它在 callingActivity 中不存在并被传递给 PermissionHandler。
我也考虑过在运行时使用反射和代理来解决这个问题,但没有成功。
最佳答案
据我搜索,我发现它是 android 中的一个错误。你可以看到 live issue here . onRequestPermissionsResult()
将不会在调用它的 Activity 之后的任何其他类中调用。
有关更多详细信息,请参阅此问题:onRequestPermissionsResult not being called in dialog fragment .这个用户和你有同样的问题。
Creating a Common class for requesting permissions is a really good attempt but my friend, we need to find an alternative for handling
onRequestPermissionsResult()
关于java - 在android中的单个类中处理权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37271562/