169 похожих чатов

Всех приветствую. Подскажите пожалуйста,как получить путь к pdf файлу из

uri без специальных разрешений,кроме read_external_storage и read_media_images? Для картинок всё прекрасно работает,включая android 13,но если тип media uri document (строка 126),я не знаю,как быть. Вы можете посмотреть мой код на https://pastebin.com/bxN0Hvqr. Заранее благодарю всех за помощь.

44 ответов

174 просмотра

опять старая песня не существует никакого «пути к файлу»

Саша-Козловский Автор вопроса

Вопрос,как быть с pdf документами (проблема в строке 126).

Саша-Козловский Автор вопроса
Mike (деньги не клянчу)
android.provider.MediaStore#getDocumentUri, не?

java.io.FileNotFoundException: Volume not found for content://com.android.providers.media.documents/document/document%3A1000007596

Саша Козловский
java.io.FileNotFoundException: Volume not found fo...

Вы этот путь пытаетесь читать как обычный файл?

Саша-Козловский Автор вопроса
Leonid B.
Вы этот путь пытаетесь читать как обычный файл?

Ну вообще да,я обращаюсь к нему как файлу,но вот в строке 126 возникла проблема,т.е там надо как-то по-другому обрабатывать эти uri.

Саша-Козловский Автор вопроса

Так путь-то я не получу...

Саша Козловский
Так путь-то я не получу...

Ну сказали же, что именно путь к файлу есть не везде, не всегда и не у всего.

Саша-Козловский Автор вопроса
Leonid B.
Ну сказали же, что именно путь к файлу есть не вез...

Хорошо. Тогда как гарантированно получить имя файла? Меня удивляет ещё и то,что во всех примерах,где я видел,нету проверки на тип "document". Неужели ни у кого из здесь присутствующих не было задачи получить путь к документу через uri?

Саша Козловский
Хорошо. Тогда как гарантированно получить имя файл...

имя файла так же можно вытянуть по юри с помощью курсора, но его может не быть. Этот параметр наллейбл

Саша Козловский
Но ведь в некоторых случаях существует.

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

Саша-Козловский Автор вопроса

Вопрос как гарантированно получить имя файла,которого типа нет.

Саша-Козловский Автор вопроса
Leonid B.
Никак

Вот именно,а мне на сервер желательно передавать имя файла.

Саша Козловский
Вот именно,а мне на сервер желательно передавать и...

нет гарантии такой. Ну что поделать. нет и нет вот..

Саша-Козловский Автор вопроса
Leonid B.
Сгенерировать любое своё и отправить

Ну вот только так и придётся. На всякий случай ещё в другом чате/чатах поспрашиваю,вдруг каой-то способ есть,учитывая,что имя мне по-любому нужно,чтобы узнать расширение и отправить его на сервер через mediaType в okhttp.

Саша Козловский
Ну вот только так и придётся. На всякий случай ещё...

Значит создавай темп файл перед отправкой, его и сконвертить проще и имя будет 100%

Саша-Козловский Автор вопроса
Андрей
Значит создавай темп файл перед отправкой, его и с...

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

Саша Козловский
Об этом я тоже думал,т.е создать файл в кеш директ...

Там можно создавать файл и задать ему удаление при выходе

Там прям есть создание файла createTemp что-то там, оно сразу создаст его в кеш

Саша Козловский
А,посмотрю. Это в context?

Честно не помню, погуглить надо, помню что из коробки есть решение временных файлов

Саша Козловский
Хорошо. Тогда как гарантированно получить имя файл...

Задача была, решал через медиа курсор, гарантий не дает метод. "на каком то устройстве молча не будет работать". непрозрачные ури типа content: надо открывать через контент резольвер, там есть гарантия

Саша-Козловский Автор вопроса
Сергей П.
Задача была, решал через медиа курсор, гарантий не...

А имя с подобными uri,т.е начинающимися с content гарантированно через курсор получить можно и нет ли у Вас решения для pdf,я про медиа курсор? Интересно,на каких устройствах получение пути через медиа не работает?

Саша-Козловский Автор вопроса
Сергей П.
Да тупо прямо на эмуляторе вот не работало.

Ну на эмуляторе всё время есть какие-то сюрпризы.

Саша-Козловский Автор вопроса
Саша Козловский
Ну на эмуляторе всё время есть какие-то сюрпризы.

Хотя на реальных устройствах они тоже могут быть.

Саша-Козловский Автор вопроса

Огромное спасибо.

Жесть динозавра откопали

Саша Козловский
Огромное спасибо.

Нагуглил его на СО по словам типа android content uri get real path Но единственный повод вычислять реальный путь - это если сторонняя либа хочет File и не умеет uri читать

Саша Козловский
Хорошо. Тогда как гарантированно получить имя файл...

Господи, да открой память телефона в интенте и верни ссылку на файл в результате и потом вальстримь еë в инпутстрим(урьль)

Саша Козловский
Хорошо. Тогда как гарантированно получить имя файл...

И не надобно никаких разрешений, только куери в манифест закинуть

Саша-Козловский Автор вопроса

Как её открыть?

Саша Козловский
Как её открыть?

private fun openFile() { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" addCategory(Intent.CATEGORY_OPENABLE) } if (intent.resolveActivity(getPackageManager()) != null) { startForResult.launch(intent) } else { Toast.makeText(this@MainActivity, "There is no app that support this action", Toast.LENGTH_SHORT).show() } }

Капитан Шимпанзе
private fun openFile() { val intent = Inte...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта