java - 在android中的单个类中处理权限

标签 java android

为了在 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/

相关文章:

java - 如何重置以前单击的按钮的颜色?

java - 获取java.lang.IllegalStateException : This call must happen in the AWT Event Dispatch Thread! 请引用

java - 如何将 SVG 路径 (SVGOMPathElement) 转换为点数组?

java - 从我的对象中清除 Hibernate 但不要延迟加载

android - ksoap2 Android 仅适用于 4.0.x

android - 使用 ExpandableListView 进行 Espresso 测试

java - 在 Android 上获取准确的电池电量

java - GWT 与 com 端口一起使用

java - 如何在 Eclipse RCP 应用程序中设置首选项的默认值

android - 是否可以在 textview 中缩放 drawableleft 和 drawableright?