Запросить разрешения и onRequestPermissionResult в "androidx.fragment.app.Fragment" - PullRequest
0 голосов
/ 30 октября 2019

Я новичок в Android, и был бы признателен за любую помощь. В основном в androidx.fragment.app.Fragment после вызова requestPermissions(), onRequestPermissionsResult() никогда не вызывается.

Я читаю по другому вопросу ( onRequestPermissionsResult не вызывается во фрагменте, если он определен как во фрагменте, так и в операции )что ActivityCompat.requestPermissions приведет к вызову метода действия onRequestPermissionsResult. и простой requestPermissions вызовет onRequestPermissionsResult в том же фрагменте. Я пробовал оба способа, но каждый раз, когда вызывается метод действия, я думаю, может быть, потому что это не фрагмент поддержки v4, а androidx.fragment.app.Fragment.

Я пытался переопределить onRequestPermissionsResult в действии и вызвал метод super, нометод все еще фрагмента не вызывается.

private final String[] REQUIRED_PERMISSIONS = new String[]{"android.permission.CAMERA", "android.permission.WRITE_EXTERNAL_STORAGE"};
private int REQUEST_CODE_PERMISSIONS = 10;

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        setupTimeOut();

        if (allPermissionsGranted()) {
            // Do stuff that requires permission
        } else {
            requestPermissions(REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CODE_PERMISSIONS) {
            if (allPermissionsGranted()) {
                // Do stuff that requires permission
            } else {
                Toast.makeText(getViewContext(), "Permissions not granted", Toast.LENGTH_SHORT).show();
            }
        }
    }

    private boolean allPermissionsGranted() {
        //check if req permissions have been granted
        for (String permission : REQUIRED_PERMISSIONS) {
            if (ContextCompat.checkSelfPermission(getViewContext(), permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }

что я хочу, чтобы получить обратный вызов результата разрешений в том же фрагменте. В случае, если это уместно, разрешения для камеры и записи во внешнее хранилище, а фрагмент представляет собой простой фрагмент захвата фотографий.

...