【问题标题】:FileProvider.getUriForFile() throwing illegal argument exception (Internal Storage issue)FileProvider.getUriForFile() 抛出非法参数异常(内部存储问题)
【发布时间】:2019-01-18 19:43:28
【问题描述】:

我相信我已经尝试了几乎所有我遇到但无法处理此错误的方法,请有人帮忙。

我的文件存在于文件夹中:

这就是我的内部存储的样子 已编辑:更新的屏幕截图 Internal storage shows that file does exist

我的代码如下:

val intent = Intent(Intent.ACTION_VIEW)
                    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
                val uriNew = FileProvider.getUriForFile(this@, "com.thatapp.fileprovider", filePDF)
                intent.setDataAndType(uriNew,"application/pdf")
                try{
                    startActivity(intent);
                } catch(e:ActivityNotFoundException){
                    val toast =  Toast.makeText(this,"No app found to open the PDF. Please install Adobe Reader",Toast.LENGTH_SHORT)
                    toast.show()
                }

报错如下:

java.lang.IllegalArgumentException:找不到包含 /data/data/com.thatapp.sitereport/app_Site_20180811_112642/Report_20180811_122857.pdf 的配置根目录

最后我的 file_paths 看起来像这样:

    <?xml version="1.0" encoding="utf-8"?>

<paths xmlns:android="http://schemas.android.com/apk/res/android">

    <external-path name="My_Images" path="." />
    <files-path
        name="Files"
        path="/"/>
    <!--external-path name="external_files" path="."/-->

</paths>

【问题讨论】:

  • 才发现这两个名字不一样。 “存储的一个”和一个用于 uri 的。首先要检查为什么会这样

标签: android uri storage internal


【解决方案1】:

停止将文件和目录直接放在/data/data/com.thatapp.sitereport/ 中。我不确定你是怎么做到的。在Context 上使用getFilesDir() 并将您的文件和子目录放在那里。这相当于/data/data/com.thatapp.sitereport/files/(尽管具体路径会因设备和用户而异)。

此时,您现有的FileProvider 设置应该可以工作。

如果您坚持将文件保存在该位置,那是您的决定,但您不能使用 FileProvider,因为它不支持从那里提供服务。您需要创建自己的 ContentProvider 来提供这些文件。

【讨论】:

  • 谢谢。我将文件放在 /data/data/com.thatapp.sitereport/ 下创建的子目录中
猜你喜欢
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2014-01-25
  • 2021-06-11
  • 1970-01-01
相关资源
最近更新 更多