Java 文件提供程序导致Acrobat打开不同的文件名
编辑:哦,忘了显示表单的完整路径 在Android 11之后,当我将所有内容转换为使用我的URI的Java 文件提供程序导致Acrobat打开不同的文件名,java,android,pdf,android-fileprovider,Java,Android,Pdf,Android Fileprovider,编辑:哦,忘了显示表单的完整路径 在Android 11之后,当我将所有内容转换为使用我的URI的FileProvider时,我试图让它正常工作,这就开始发生了 在安卓11之前,我可以使用Uri.fromFile和setReadable/setwriteable组合,然后再将其传递出去,我可以填写一个PDF文件,返回,然后保存它 现在发生的事情是,在我退出并尝试返回后,它将打开PDF的副本,而不是原始副本。例如,第一次它将打开MyForm.pdf,第二次(仅当以前进行了更改时)它将打开MyFor
FileProvider
时,我试图让它正常工作,这就开始发生了
在安卓11之前,我可以使用Uri.fromFile
和setReadable
/setwriteable
组合,然后再将其传递出去,我可以填写一个PDF文件,返回,然后保存它
现在发生的事情是,在我退出并尝试返回后,它将打开PDF的副本,而不是原始副本。例如,第一次它将打开MyForm.pdf
,第二次(仅当以前进行了更改时)它将打开MyForm-1.pdf
我在打开URI时做了一个Log
条目,以确保它不会以某种方式发生变化(我的应用程序中也没有这样做的机制)。它仍然正确地命名为MyForm.pdf
我还尝试从不同的文件夹导入/读取PDF(getFilesDir
vsgetExternalFilesDir
),以防其他应用程序访问我应用程序文件夹中的文件时出现其他问题
打开PDF:
File theForm = new File(Uri.parse("file:///storage/emulated/0/Android/data/com.smartascii.myapp/files/MyForm.pdf").getPath());
Uri theUri = FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID + ".provider",theForm);
pdf.setDataAndType(theUri, "application/pdf");
pdf.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(pdf, 0);
if (!resInfo.isEmpty()){
for (ResolveInfo info : resInfo) {
if (info.activityInfo.packageName.toLowerCase().contains("adobe.reader") ||
info.activityInfo.name.toLowerCase().contains("adobe.reader") ) {
pdf.setPackage(info.activityInfo.packageName);
found = true;
break;
}
}
if (found) {
startActivityForResult(pdf, EDIT_FORM);
} else {
startActivityForResult(Intent.createChooser(pdf, "Open form with..."), EDIT_FORM);
}
}
File theForm=新文件(Uri.parse(“file:///storage/emulated/0/Android/data/com.smartascii.myapp/files/MyForm.pdfgetPath());
Uri theUri=FileProvider.getUriForFile(getApplicationContext(),BuildConfig.APPLICATION\u ID+“.provider”,格式);
setDataAndType(theUri,“application/pdf”);
pdf.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
List resInfo=getPackageManager();
如果(!resInfo.isEmpty()){
对于(ResolveInfo:resInfo){
if(info.activityInfo.packageName.toLowerCase()包含(“adobe.reader”)||
info.activityInfo.name.toLowerCase()包含(“adobe.reader”)){
pdf.setPackage(info.activityInfo.packageName);
发现=真;
打破
}
}
如果(找到){
startActivityForResult(pdf,编辑表格);
}否则{
startActivityForResult(Intent.createChooser(pdf,“打开表单…”),编辑表单);
}
}
文件_paths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="external"
path="." />
<external-files-path
name="external_files"
path="." />
<cache-path
name="cache"
path="." />
<external-cache-path
name="external_cache"
path="." />
<files-path
name="files"
path="." />
</paths>
我是不是漏掉了什么明显的东西?谢谢。@blackapps噢!没赶上那个--修好了。