Oreo DocumentsContract.getDocumentId (uri) возвращает путь вместо Long - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь получить реальный путь к файлу, хранящемуся в файловой системе Android (я тестирую на эмуляторе с Android 8.1)

вот мой код:

final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);

Для более ранних версий Android 8.0 переменная id содержит значение long, поэтому следующая строка работает, как и ожидалось.

В Android 8 переменная id содержит путь, подобный этому raw:/storage/emulated/0/Download/my_file.pdf, поэтому приведение Long.valueOf(id)) вызывает 'java.lang.NumberFormatException' Exception.

Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 16 августа 2018

Если бы та же проблема решила ее, сделав следующее.

final String id = DocumentsContract.getDocumentId(uri);
if (!TextUtils.isEmpty(id)) {
            if (id.startsWith("raw:")) {
                return id.replaceFirst("raw:", "");
            }
            try {
                final Uri contentUri = ContentUris.withAppendedId(
                        Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
                return getDataColumn(context, contentUri, null, null);
            } catch (NumberFormatException e) {
                 return null;
            }
      }

Решение было найдено в комментарии https://github.com/Yalantis/uCrop/issues/318

...