Почему Android File Chooser с действием намерения ACTION_OPEN_DOCUMENT не работает на некоторых устройствах, если файл выбран в Диспетчере файлов? - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь выбрать PDF-файл с помощью намеренного действия ACTION_OPEN_DOCUMENT на Android, но на некоторых устройствах его значение равно нулю.

Я хочу, чтобы пользователь выбирал файл PDF только со своего устройства. Для этого я использовал намеренное действие ACTION_OPEN_DOCUMENT.

Это работает корректно на большинстве устройств, но на некоторых устройствах, в основном Xiaomi, при выборе файла дает ноль при попытке получить данные намерения intent.getData () в onActivityResult с помощью опции File Manager, как показано на рисунке ниже.

Я пытаюсь избежать использования действия ACTION_GET_CONTENT, поскольку сторонние приложения не ограничивают содержимое только в формате pdf. Другие приложения допускают формат, который также не является PDF.

file chooser image

На изображении при выборе файла из меню File manager его значение равно null как intent.getData (), но работает нормально, когда я выбираю документ из опции Documents.

Ниже приведен код запроса выбора файлов

Intent intent = new Intent();
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
startActivityForResult(Intent.createChooser(intent, "Choose a file"), Constants.FILE_CHOOSER);

После выбора файла

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        final Uri uri = intent.getData(); //Uri is null
    }
}

Я ожидаю, что некоторые данные в intent.getData (), но они дают ноль.

Неустранимое исключение: java.lang.RuntimeException: сбой при доставке результата ResultInfo {who = null, request = 501, result = -1, data = Intent {(has extras)}} в действие {com.avail.easyloans.android /com.avail.easyloans.feature.cashup.activities.documents.ActivityUploadBankStmt}: java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String android.net.Uri.getAuthority ()' для ссылка на нулевой объект

В чем может быть возможная ошибка?

...