【问题标题】:Fileprovider always throws IAEFileProvider 总是抛出 IAE
【发布时间】:2019-03-22 14:55:06
【问题描述】:

我查看了 StackOverflow 上的所有答案,但没有答案。

真实设备和模拟器同样的错误。

Fileprovider 总是抛出 IllegalArgumentException

有清单

<application
   ...

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:grantUriPermissions="true"
        android:exported="false"
        android:authorities="${applicationId}">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filepath"/>
    </provider>

</application>

有filepath.xml

<paths>
<files-path
    name="logs"
    path="logs/" /></paths>

而且有些代码总是抛出异常

        final Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

        File file = new File(logger.getFileName());
        Uri uri = null;
        try {
            uri = FileProvider.getUriForFile(getContext(), BuildConfig.APPLICATION_ID, file);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }

logger.getFileName() - 返回真实文件名,例如:“logs_22032019.txt”

我已经尝试过的: 清单中的更改,例如: android:authorities="com.realname.of.package" filepath.xml 的变化

name="logs"
  • 1) 文件名相同 2) 只是 /

    path="logs/"

  • 1) 。 2) / 3) 完整路径 4) 文件 5) /files 6) 文件/ e.t.g

我注意到了——确实有文件的路径:

/data/user/0/com.app.realname/files/log.txt

但其中的 FileProvider 转到:

"log.txt" -> "/data/data/com.app.realname/files/log.txt"-->

注意:我只需要内部存储空间。

【问题讨论】:

    标签: android android-intent android-fileprovider internal-storage android-internal-storage


    【解决方案1】:

    logger.getFileName() - 返回真实文件名,例如:“logs_22032019.txt”

    这不是一个有效的文件系统路径。这是一个有效的文件名,但它没有说明该文件应该在设备上的什么位置。

    这是您的FileProvider 配置:

    <files-path
        name="logs"
        path="logs/" />
    

    为此,一个可行的File 是:

    File file = new File(getFilesDir(), "logs/"+logger.getFileName());
    

    确实有文件的路径...但是其中的FileProvider去

    对于主要设备用户来说,这些是相同的文件系统位置。

    【讨论】:

    • 有效!万分感谢!我讨厌我的疏忽。浪费了这么多时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2010-12-11
    相关资源
    最近更新 更多