FileProvider无法打开文件

时间:2018-02-14 17:37:18

标签: android android-fileprovider

我正在努力使用FileProvider。即使关注this Google文档和this帖子,也与我的问题非常相似。

所以我试图从外部存储打开一个pdf文件。目录是“Download / nst”。我在file_paths.xml

中提供了路径
<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="br.com.myapp.bomapp"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths"/>
        </provider>

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="Download" path="Download/" />
</paths>

这就是我获取pdf路径的方式:

private File getPdfFile(long workOrderId){

        File downloads = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS+"/nst/"+workOrderId);
        String[] filesNames = downloads.list(
            new FilenameFilter()
            {
                public boolean accept(File dir, String name)
                {
                    return name.endsWith(".pdf");
                }
            }
        );

        if(filesNames.length > 0){
            return new File(downloads, filesNames[0]);
        }

        return null;
    }

这就是我打开pdf的方式:

File pdf = getPdfFile(workOrder.getId());
        if(pdf == null){
            view.showError(context.getString(R.string.error_no_pdf_found));
            return;
        }

        Intent target = new Intent(Intent.ACTION_VIEW);
        Uri fileUri;

        if(Build.VERSION.SDK_INT >= 24){
            fileUri = FileProvider.getUriForFile(context, "br.com.myapp.bomapp", pdf);
            target.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        }
        else{
            fileUri = Uri.fromFile(pdf);
        }

        target.setDataAndType(fileUri,"application/pdf");
        target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

        Intent intent = Intent.createChooser(target, "Open File");
        try {
            context.startActivity(intent);
        } catch (ActivityNotFoundException e) {
            view.showError(context.getString(R.string.error_no_pdf_reader_found));
        }

注意我正在使用Intent.FLAG_GRANT_READ_URI_PERMISSION

调试getPdfFile方法时,为我返回此路径:

new File(downloads, fileNames[0])": "fileNames[0]=/storage/emulated/0/Download/nst/12345/myName.pdf"

FileProvider得到了我:

"fileUri = content://br.com.myapp.bomapp/Download/nst/12345/myFile.pdf"

当12345是文件所在的子目录时。

将文件目录传递给FileProvider后,它会打开文件但屏幕变黑,因为文件不存在。 但是当使用Uril.fromFile打开它时,会显示该文件。

我做错了吗?

0 个答案:

没有答案