onRequestPermissionsResult не вызывается в классе AlertDialog

У меня есть класс, ExportDialog, что extends AlertDialog а также implements ActivityCompat.OnRequestPermissionsResultCallback, Я запрашиваю разрешение в классе ExportDialog, вызывая

ActivityCompat.requestPermissions(getOwnerActivity(),
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);

Разрешение также включено в манифест.

Однако когда ActivityCompat.requestPermissions вызывается, onRequestPermissionsResult не вызывается с результатом запроса на разрешение.

При тестировании в эмуляторе я вижу, что выполняется запрос на разрешение, и я могу успешно включить или отклонить запрос на разрешение. Просто код внутри onRequestPermissionResult никогда не вызывается.

Я проверил пару таких сообщений, которые не помогают моей проблеме, так как вместо этого мой класс расширяет AlertDialog.

Фрагмент кода для запроса разрешения:

if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(getOwnerActivity(),
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
        return false;
    }

Фрагмент кода для onRequestPermissionResult:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                exportCategory();
            } else {
                Toast.makeText(getContext(), "Export functionality can't be carried out.", Toast.LENGTH_LONG).show();
            }
        }
    }
}

Фрагмент кода объявления класса (CustomDialog расширяет AlertDialog):

public class ExportDialog extends CustomDialog implements ActivityCompat.OnRequestPermissionsResultCallback { ... }

Заранее спасибо за помощь!

1 ответ

Решение

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

я не знаю что exportCategory() должен делать, но, возможно, вы можете сделать его общедоступным статическим в своем диалоге или переместить его в другой отдельный статический класс, а затем вызвать его из своей деятельности.

Если эта функция зависит от вашего объекта диалогового окна оповещения, вам нужно сохранить ссылку на диалоговое окно оповещения в вашей активности, а затем вызвать эту функцию (exportCategory()) с этим экземпляром диалогового окна предупреждения.

Другие вопросы по тегам