【问题标题】:Ask for WRITE_EXTERNAL_STORAGE permission from two different functions in the same activity向同一活动中的两个不同函数请求 WRITE_EXTERNAL_STORAGE 权限
【发布时间】:2019-01-09 03:47:04
【问题描述】:

我有两个不同的功能用于 takeScreenshot 和 saveAsPDF,它们都需要 WRITE_EXTERNAL_STORAGE 权限。但是我怎样才能在onRequestPermissionsResult 中为同一个Activity 中的相同权限创建一个switch case,因为requestCode 在这两种情况下都是相同的。

【问题讨论】:

  • 在你的情况下,你只需要检查 ExternalWritePermission 是否被授予,因为只要通过我在 PermissionCheck 类中显示的函数检查权限是否被授予,如果不是授予然后 askPermission 并且在获取 ScreenShot 和 saveAsPdf 时只需要一次,你只需要检查它是否被授予。

标签: android android-permissions android-6.0-marshmallow runtime-permissions


【解决方案1】:

你可以像下面这样创建单独的类来检查和询问权限 ->

public class PermissionCheck {

    private static final String TAG = PermissionCheck.class.getSimpleName();

    private Context context;
    private static final int EXTERNAL_WRITE_PERMISSION_CODE = 620;
    private static final int CAMERA_PERMISSION_CODE = 335;

    public PermissionCheck(Context context) {
        this.context = context;
    }

    //  Check Required Permissions...
    public boolean CheckRequestedPermission(Context context, String CheckRequiredPermission) {
        return ContextCompat.checkSelfPermission(context, CheckRequiredPermission) == PackageManager.PERMISSION_GRANTED;
    }

    //  To Request Permission...
    private void requestPermission(final Context context, final String RequestedPermission, final int PermissionCode) {
        if (!CheckRequestedPermission(context, RequestedPermission)) {
            ActivityCompat.requestPermissions((Activity) context, new String[]{RequestedPermission}, PermissionCode);
        }
    }


    //  Just add Permission Code that you required to get permissions and call this method...
    public void AskPermission(int RequestCode) {
        switch (RequestCode) {
            case EXTERNAL_WRITE_PERMISSION_CODE:
                requestPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE, EXTERNAL_WRITE_PERMISSION_CODE);
                break;
            case CAMERA_PERMISSION_CODE:
                requestPermission(context, Manifest.permission.CAMERA, CAMERA_PERMISSION_CODE);
                break;
        }
    }
}

并询问您想要的任何权限,并在 Activity 或片段中实现 OnRequestPermissionResult,如下所示。

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case EXTERNAL_WRITE_PERMISSION_CODE:
                Log.d(TAG, "onPermissionResult : Permission Granted? " + IsExternalWritePermissionGranted);
                //  changing value based on permission Deny/Accept
                IsExternalWritePermissionGranted = permissionCheck.CheckRequestedPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
                break;
            case CAMERA_PERMISSION:
                //  changing value based on permission Deny/Accept
                IsCameraPermissionGranted = permissionCheck.CheckRequestedPermission(this, Manifest.permission.CAMERA);
                break;
        }
    }

请注意,您从活动/片段传递给 PermissionCheck 的权限代码应该与 PermissionCheck 类中的相同。

【讨论】:

    猜你喜欢
    • 2021-05-23
    • 1970-01-01
    • 2014-04-22
    • 2020-10-14
    • 2017-09-09
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多