uri без специальных разрешений,кроме read_external_storage и read_media_images? Для картинок всё прекрасно работает,включая android 13,но если тип media uri document (строка 126),я не знаю,как быть. Вы можете посмотреть мой код на https://pastebin.com/bxN0Hvqr. Заранее благодарю всех за помощь.
опять старая песня не существует никакого «пути к файлу»
Вопрос,как быть с pdf документами (проблема в строке 126).
android.provider.MediaStore#getDocumentUri, не?
java.io.FileNotFoundException: Volume not found for content://com.android.providers.media.documents/document/document%3A1000007596
Вы этот путь пытаетесь читать как обычный файл?
Ну вообще да,я обращаюсь к нему как файлу,но вот в строке 126 возникла проблема,т.е там надо как-то по-другому обрабатывать эти uri.
Так путь-то я не получу...
Ну сказали же, что именно путь к файлу есть не везде, не всегда и не у всего.
Хорошо. Тогда как гарантированно получить имя файла? Меня удивляет ещё и то,что во всех примерах,где я видел,нету проверки на тип "document". Неужели ни у кого из здесь присутствующих не было задачи получить путь к документу через uri?
да нет никакого файла, не существует его, не обязан
имя файла так же можно вытянуть по юри с помощью курсора, но его может не быть. Этот параметр наллейбл
Но ведь в некоторых случаях существует.
Но ведь в некоторых — нет.
а не слишком ли заморочено вычислять то ли то случай или нет. Получи с помощью контент резолвера и курсора это имя и не парься. если есть, то круто, если нет, то заглушку вешай
Вопрос как гарантированно получить имя файла,которого типа нет.
Вот именно,а мне на сервер желательно передавать имя файла.
нет гарантии такой. Ну что поделать. нет и нет вот..
Сгенерировать любое своё и отправить
Ну вот только так и придётся. На всякий случай ещё в другом чате/чатах поспрашиваю,вдруг каой-то способ есть,учитывая,что имя мне по-любому нужно,чтобы узнать расширение и отправить его на сервер через 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() } }
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
shift+command+m ?
Обсуждают сегодня