Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件提供程序导致Acrobat打开不同的文件名_Java_Android_Pdf_Android Fileprovider - Fatal编程技术网

Java 文件提供程序导致Acrobat打开不同的文件名

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

编辑:哦,忘了显示表单的完整路径

在Android 11之后,当我将所有内容转换为使用我的URI的
FileProvider
时,我试图让它正常工作,这就开始发生了

在安卓11之前,我可以使用
Uri.fromFile
setReadable
/
setwriteable
组合,然后再将其传递出去,我可以填写一个PDF文件,返回,然后保存它

现在发生的事情是,在我退出并尝试返回后,它将打开PDF的副本,而不是原始副本。例如,第一次它将打开
MyForm.pdf
,第二次(仅当以前进行了更改时)它将打开
MyForm-1.pdf

我在打开URI时做了一个
Log
条目,以确保它不会以某种方式发生变化(我的应用程序中也没有这样做的机制)。它仍然正确地命名为
MyForm.pdf

我还尝试从不同的文件夹导入/读取PDF(
getFilesDir
vs
getExternalFilesDir
),以防其他应用程序访问我应用程序文件夹中的文件时出现其他问题

打开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噢!没赶上那个--修好了。