Android 11: Первичный каталог (недействительный) не разрешен для контента: // Media/External/File, разрешенные каталоги Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android 11: Первичный каталог (недействительный) не разрешен для контента: // Media/External/File, разрешенные каталоги

Сообщение Anonymous »

Я пытаюсь создать файл PDF из строки base64. Из -за обновления хранения в Android 11 я должен изменить свой код, но я получаю следующую ошибку в устройствах Android 11:

Код: Выделить всё

java.lang.IllegalArgumentException: Primary directory (invalid) not allowed for content://media/external/file; allowed directories are [Download, Documents]
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:172)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
at android.content.ContentProviderProxy.insert(ContentProviderNative.java:549)
at android.content.ContentResolver.insert(ContentResolver.java:2149)
at android.content.ContentResolver.insert(ContentResolver.java:2111)
< /code>
Этот код создает файл PDF и сохраните его в папку. < /p>
public static void createPDF(Context mContext, String fileName, String base64) {
try {
String folderPath;
File dwldsPath;

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
folderPath = mContext.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS) + File.separator + "appFolderName";
dwldsPath = new File(folderPath + "/" + fileName);

File folder = new File(folderPath);
folder.mkdirs();

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName); // file name
values.put(MediaStore.MediaColumns.MIME_TYPE, "application/pdf"); // file extension, will automatically add to file
values.put(MediaStore.DownloadColumns.RELATIVE_PATH, folderPath); // end "/" is not mandatory
Uri uriFile = mContext.getContentResolver().insert(MediaStore.Files.getContentUri("external"), values); // important!
OutputStream outputStream = mContext.getContentResolver().openOutputStream(uriFile);
outputStream.write(Base64.decode(base64, 0));
outputStream.close();
} else {
folderPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + File.separator + "appFolderName";
dwldsPath = new File(folderPath + "/" + fileName);

File folder = new File(folderPath);
folder.mkdirs();

FileOutputStream os = new FileOutputStream(dwldsPath, false);
os.write(Base64.decode(base64, 0));
os.flush();
os.close();
}

openPDF(mContext, dwldsPath);
} catch (IOException e) {
e.printStackTrace();
} catch (ActivityNotFoundException e) {
Toast.makeText(mContext, "No PDF Viewer Installed", Toast.LENGTH_LONG).show();
}
}
< /code>
Этот код работает для открытия файла < /p>
  public static void openPDF(Context mContext, File dwldsPath) {
Intent intentUrl = new Intent(Intent.ACTION_VIEW);
Uri uri = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID + ".provider", dwldsPath);
intentUrl.setDataAndType(uri, "application/pdf");
intentUrl.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intentUrl.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
mContext.startActivity(intentUrl);
}
В дополнение к этой ошибке, folder.mkdirs () возвращает false в Android 11. Здесь провайдер_Пат.xml и определен в Androidmanifest.xml






< /code>
Я Google It, но я не мог найти какое -либо рабочее решение, чтобы решить проблему. Заранее спасибо.


Подробнее здесь: https://stackoverflow.com/questions/673 ... a-external
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»