Запросите разрешение WRITE_EXTERNAL_STORAGE для двух разных функций в одном действии - PullRequest
0 голосов
/ 09 января 2019

У меня есть две разные функции для takeScreenshot и saveAsPDF, обе из них требуют разрешения WRITE_EXTERNAL_STORAGE. Но как я могу создать случай переключения в onRequestPermissionsResult для одного и того же разрешения в одной и той же операции, поскольку requestCode одинаково в обоих случаях.

1 Ответ

0 голосов
/ 09 января 2019

Вы можете создать отдельный класс, например, следующий, чтобы проверить и запросить разрешение ->

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;
        }
    }
}

и спросите, какое разрешение вы хотите, и внедрите OnRequestPermissionResult в Activity или фрагмент, как показано ниже.

@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.

...