【问题标题】:FileProvider doesn't give me permission to open a file in another appFileProvider 不允许我在另一个应用程序中打开文件
【发布时间】:2018-05-28 20:46:50
【问题描述】:

在过去的几个小时里,我一直忙于让 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>

【问题讨论】:

    标签: android


    【解决方案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);
      

    【讨论】:

    • 非常感谢!这就是问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多