【问题标题】:Get file path from Uri created via FileProvider从通过 FileProvider 创建的 Uri 获取文件路径
【发布时间】:2016-10-10 16:08:36
【问题描述】:

我使用这种方法从 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));
}

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

【问题讨论】:

    标签: android uri android-fileprovider


    【解决方案1】:

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

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

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

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

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

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

    更一般地说,您无法获得Uri 的“文件路径”,原因很简单,Uri 不需要指向文件,更不用说您可以访问的文件了。使用ContentResolveropenInputStream() 等方法访问Uri 所代表的内容。

    【讨论】:

    • @user27799: FileProvider 仅用于将内容传送到其他应用。如果您不这样做,请摆脱FileProvider。如果您关心的是FileUriExposedException,请不要在Intent 中添加Uri,而是添加包含文件路径(例如path.getAbsolutePath())的String extra,或者传递File 对象本身作为Serializable 额外。其中一项或两项应避免使用FileUriExposedException
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多