通过FileProvider创建的Uri获取文件路径

4
我使用以下方法从Uri获取文件路径:https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java#L257。但是,当我传递以下类似的Uri时,它会抛出异常(找不到“_data”列):
public static Uri uriFromFile(Context context, String path) {
    if (path == null) return null;
    return FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", new File(path));
}

我只需要在我的活动之间传递文件路径。

1个回答

5

我使用这种方法从Uri获取文件路径。

那是一种不可靠的方法,只适用于少量的Uri值。

当我传递以下创建的Uri时,它会抛出异常(“_data”列未找到):

当然。对于大多数Uri值来源,该代码将失败。

从通过FileProvider创建的Uri获取文件路径:

在这种特定情况下,您已经知道“文件路径”。它由代码片段中命名为path的变量表示。

更普遍地说,您无法获取Uri的“文件路径”,因为没有要求Uri指向文件,更不用说您可以访问的文件了。使用ContentResolver和像openInputStream()这样的方法来访问Uri所代表的内容。


7
FileProvider 只用于向其他应用程序传递内容。如果您不需要这样做,请删除 FileProvider。如果您关心的是 FileUriExposedException,请勿将 Uri 放入 Intent 中,而是将包含文件路径(例如 path.getAbsolutePath())的 String extra 或将 File 对象本身作为 Serializable extra 传递。其中一个或两个应该可以避免 FileUriExposedException - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接