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

Nic*_*nko 4 android uri android-fileprovider

我使用这种方法从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));
}
Run Code Online (Sandbox Code Playgroud)

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

Com*_*are 5

我使用此方法从Uri获取文件路径

这是一种不可靠的方法,仅适用于少量Uri值.

但是当我传递Uri时会抛出异常("_data"列未找到),如下所示:

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

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

在这种特定情况下,您已经知道"文件路径".它由path您的代码段中指定的变量表示.

更一般地,你不能得到一个"文件路径" Uri,原因很简单,没有要求,即一个Uri点到一个文件,更不用说一个可以访问.使用ContentResolver和方法openInputStream()来访问由...表示的内容Uri.

  • @ user27799:`FileProvider`仅对将内容*传递给其他应用程序*有用.如果你不这样做,摆脱`FileProvider`.如果您关注的是`FileUriExposedException`,请不要在`Intent`中放置一个`Uri`,而是放一个包含文件路径的`String`附加内容(例如``path.getAbsolutePath()`),或者传递`File`将自身对象称为`Serializable`.其中一个或两个应该避免`FileUriExposedException`. (7认同)