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()
) с этим экземпляром диалогового окна предупреждения.