FileProvider不允许我在另一个应用程序中打开文件

时间:2018-05-28 12:42:27

标签: android

在过去的几个小时里,我一直忙于让FileProvider工作来打开其他应用程序中的文件。在某个过程中出现问题,因为应用程序只是没有权限打开我放在Intent中的文件。我真的希望有人可以帮我解决这个问题。

我对android编程的了解不是很好。所以这可能只是一个非常愚蠢的错误

这是我的代码。
要打开一个文件我这样做(fileToOpen长度大约是300kb所以文件加载到变量中):

File fileToOpen = new File(Environment.getExternalStorageDirectory(), path);
        Uri contentUri = FileProvider.getUriForFile(this, "me.albie.share", fileToOpen);
        Intent openIntent = new Intent(Intent.ACTION_VIEW);
        openIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        openIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        openIntent.setDataAndType(contentUri, "application/pdf");
        openIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        PackageManager pm = this.getPackageManager();
        if (openIntent.resolveActivity(pm) != null) {
            this.startActivity(Intent.createChooser(openIntent, "Open file"));
        }

清单文件中的提供者:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="me.albie.share"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

带路径的

的Xml文件
<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="external_files" path="/"/>
</paths>

1 个答案:

答案 0 :(得分:1)

    openIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    openIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    openIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

setFlags()替换所有以前的标志,因此您的FLAG_ACTIVITY_NO_HISTORY会清除您的两个权限标记。之一:

  • 将其中的每一个切换为addFlags()

  • 使用一次setFlags()电话:

    openIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION |
                        Intent.FLAG_ACTIVITY_NO_HISTORY);