Невозможно открыть PDF из внутреннего хранилища для просмотра на Android 8 и 9 с помощью File Provider

Мой ответ:

JFileChooser chooser= new JFileChooser();
chooser.showOpenDialog(chooser);
File file = chooser.getSelectedFile();
String Content = "What you want to append to file";

try 
{
    RandomAccessFile random = new RandomAccessFile(file, "rw");
    long length = random.length();
    random.setLength(length + 1);
    random.seek(random.length());
    random.writeBytes(Content);
    random.close();
} 
catch (Exception exception) {
    //exception handling
}
0
задан Gissipi_453 2 March 2019 в 06:38
поделиться

3 ответа

У меня проблема. Когда вы создаете новый файл, используя File file = new File (path), не добавляйте file:// перед этим путем.

Это правильно -

String url = "/storage/emulated/0/Android/data/com.verna.poc/files/Download/mypdf.pdf";
File file= new File(url);

Это неправильно -

String url = "file:///storage/emulated/0/Android/data/com.verna.poc/files/Download/mypdf.pdf";
File file= new File(url);
0
ответ дан Gissipi_453 2 March 2019 в 06:38
поделиться

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

FileProvider - это специальный подкласс ContentProvider, который обеспечивает безопасный общий доступ к файлам, связанным с приложением, путем создания контента: // Uri для файла вместо файла: /// Uri.

FileProvider может генерировать URI контента только для файлов в каталогах, которые вы указали заранее. Чтобы указать каталог, укажите его область хранения и путь в XML, используя дочерние элементы элемента. Например, следующий элемент paths сообщает FileProvider, что вы намереваетесь запрашивать URI контента для подкаталога images / вашей личной файловой области.

Этот ответ имеет хороший пример по этой ссылке

Вот страница документации для FileProvider

[ 112] FileProvider

0
ответ дан Sushobh Nadiger 2 March 2019 в 06:38
поделиться

обращаются к файлу из приложения, которому принадлежит этот личный каталог - Intent не будет его обрезать, потому что он мог быть отправлен любым приложением. и если он должен быть средством выбора файлов Intent, то создайте общий каталог для своего приложения на SD-карте, где любое приложение сможет получить к нему доступ; обычный каталог Downloads также подойдет для этого. другой вариант (как изначально предлагалось) состоял бы в создании простого средства выбора файлов, которое находится в приложении, так что для выбора файла не потребовалось бы Intent ... все это имеет определенные преимущества и недостатки; выберите одну возможность, которая подходит вам лучше всего ... в общем, это частное или общее хранилище.

0
ответ дан Martin Zeitler 2 March 2019 в 06:38
поделиться
Другие вопросы по тегам:

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