1

Я столкнулся с файлом FileUriExposedException, где вы пытаетесь отправить файл: /// Uri в другое приложение (в этом случае камера), и вместо этого я должен использовать FileProvider (вызывает сбой на api 24 Nougat) ,Действительно ли FileProvider Android поддерживает внешний путь-путь?

В нашем приложении, мы создаем файл, используя getExternalFilesDir(String) метод для Context:

context.getExternalFilesDir("attachments"); 

FileProvider documentation ведет меня поверить, что я должен использовать external-files-path в моем paths.xml, если я хочу функциональность быть такой же, как сейчас ,

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
    <external-files-path 
     name="attachments" 
     path="attachments/" /> 
</paths> 

Но после того, как прибегая к помощи еще немного, я нашел несколько вещей, которые заставляют меня думать, что есть проблемы с FileProvider или, по крайней мере, документация FileProvider по ...

Так

  1. Правильно ли я думать, что я должен использовать external-files-path, если я хочу, чтобы соответствовать, как в настоящее время работает мое приложение?
  2. Действительно ли документация/FileProvider нарушена/неверна, и вместо этого я должен использовать что-то вроде cwac-provider?

UPDATE

Для полноты картины, поскольку @CommonsWare рекомендуется ниже, с использованием версии support-v4 24.2.0 работает для меня.

ответ

2

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

Да. Хотя обратите внимание, что getExternalFilesDir() does not officially support "attachments" as a parameter, так что не удивляйтесь, если ваше приложение однажды сломается.

ли документация/FileProvider действительно сломана/неправильно

Ну, я вижу код external-files-path поддержки в JAR источников для 24.2.0 нового support-core-utils артефакта. support-v4, с 24.2.0, был подразделен на ряд отдельных артефактов, а FileProvider живет в support-core-utils.

Итак, попробуйте использовать 24.2.0 из support-v4 (или support-core-utils, если вам не нужны все support-v4).

+0

Wow! Спасибо за очень быстрый и очень полезный ответ! Я попробую 24.2 support-v4. С другой стороны, вы имеете в виду, что он не поддерживает «вложения» в том, что аргумент «String type», который я предоставляю, в идеале должен быть одним из упомянутых в документации (начиная с 'DIRECTORY _...')? – Josh

+0

@Josh: Да, в идеале это «null» или одно из указанных поддерживаемых значений. * Вероятно, они будут продолжать поддерживать произвольные строки, поскольку они никогда не выполняли проверку здесь, но мы не можем исключить, что они начнут применять правила. – CommonsWare

+0

ах ок я понимаю. Спасибо что подметил это! это то, на что мы будем смотреть. очень полезный материал! – Josh

0

У меня был аналогичный сценарий совместного использования частного файла с камерой для загрузки изображения с полным качеством без разрешения WRITE_EXTERNAL_STORAGE.

я был в состоянии сделать его работу, используя следующим

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
    <external-path 
     name="my_images" 
     path="Android/data/com.santhoshn.appprivateimageupload/files/Pictures" /> 
</paths> 

Вот рабочий образец приложение https://github.com/santbob/AppPrivateImageUpload

+0

Хотя ссылка может ответить на вопрос, всегда лучше включить ключевые части информации в свой ответ. Это позволяет пользователям находить информацию, даже если связь нарушена. Кроме того, это позволяет пользователям находить информацию более легко, чем просматривать внешнюю ссылку. –

+0

спасибо за ввод, обновит мой оригинальный ответ – SanthoshN