Android 10 - 无法对我在 getExternalFilesDir() 中创建的文件执行 PersistableUriPermission
Android 10 - unable to take PersistableUriPermission on a file that I created in getExternalFilesDir()
使用下面的代码片段,我们在 Android10 中的 getExternalFilesDir() 下的子文件夹中创建了一个文件。但是,在创建之后,如果我们立即尝试获取 persistableUriPermission,它会抛出异常 "No such permission exists...."。
我们需要检查以了解该文件是否可供稍后在通用实用程序中读取,否则我们必须制作副本。请让我们知道我们可能做错了什么以及如何解决这个问题。感谢您的帮助。
ParcelFileDescriptor filePFD =
cxt.getContentResolver().openFileDescriptor(Uri.parse(pathFileToSend), "r");
FileDescriptor fd = filePFD.getFileDescriptor();
FileInputStream fIn = new FileInputStream(fd);
File fileBaseFolder = new File(Utils.GetRootDirectory().getAbsolutePath(), Utils.DESTINATION);
if (!fileBaseFolder.exists())
fileBaseFolder.mkdirs();
if (fileBaseFolder.exists()) {
File copyFile = new File(fileBaseFolder.getAbsolutePath(), nameOfFile);
FileOutputStream fOut = new FileOutputStream(copyFile);
byte data[] = new byte[4096];
long total = 0;
int count;
while ((count = fIn.read(data)) != -1) {
total += count;
fOut.write(data, 0, count);
}
fOut.close();
Uri copiedFileUri =
FileProvider.getUriForFile(cxt,
cxt.getString(R.string.file_provider_authority),
copyFile);
if (null != copiedFileUri)
{
try {
/*At this line, an exception is thrown - No persistable permissions exist.. */
cxt.getContentResolver().takePersistableUriPermission(copiedFileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
} catch (Exception e) {
e.printStackTrace();
}
}
takePersistableUriPermission()
用于您从存储访问框架获得的 Uri
值(例如,ACTION_OPEN_DOCUMENT
)。它不适用于 FileProvider
。而且,您不需要在 Android 4.4 及更高版本上使用 getExternalFilesDir()
的权限。
使用下面的代码片段,我们在 Android10 中的 getExternalFilesDir() 下的子文件夹中创建了一个文件。但是,在创建之后,如果我们立即尝试获取 persistableUriPermission,它会抛出异常 "No such permission exists...."。 我们需要检查以了解该文件是否可供稍后在通用实用程序中读取,否则我们必须制作副本。请让我们知道我们可能做错了什么以及如何解决这个问题。感谢您的帮助。
ParcelFileDescriptor filePFD =
cxt.getContentResolver().openFileDescriptor(Uri.parse(pathFileToSend), "r");
FileDescriptor fd = filePFD.getFileDescriptor();
FileInputStream fIn = new FileInputStream(fd);
File fileBaseFolder = new File(Utils.GetRootDirectory().getAbsolutePath(), Utils.DESTINATION);
if (!fileBaseFolder.exists())
fileBaseFolder.mkdirs();
if (fileBaseFolder.exists()) {
File copyFile = new File(fileBaseFolder.getAbsolutePath(), nameOfFile);
FileOutputStream fOut = new FileOutputStream(copyFile);
byte data[] = new byte[4096];
long total = 0;
int count;
while ((count = fIn.read(data)) != -1) {
total += count;
fOut.write(data, 0, count);
}
fOut.close();
Uri copiedFileUri =
FileProvider.getUriForFile(cxt,
cxt.getString(R.string.file_provider_authority),
copyFile);
if (null != copiedFileUri)
{
try {
/*At this line, an exception is thrown - No persistable permissions exist.. */
cxt.getContentResolver().takePersistableUriPermission(copiedFileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
} catch (Exception e) {
e.printStackTrace();
}
}
takePersistableUriPermission()
用于您从存储访问框架获得的 Uri
值(例如,ACTION_OPEN_DOCUMENT
)。它不适用于 FileProvider
。而且,您不需要在 Android 4.4 及更高版本上使用 getExternalFilesDir()
的权限。