如何在 Android 中正确获取文件的 URI?

How to get URI for file correctly in Android?

我正在尝试获取这样一个文件的 URI:

Uri photoURI = FileProvider.getUriForFile(this,
                        "br.com.[blablabla].sgaconsultor",
                        createImageFile());

private File createImageFile() throws IOException {
        // Create an image file name
        String imageFileName = "registroFoto";

        ContextWrapper cw = new ContextWrapper(getApplicationContext());
        File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);

        return File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                directory
        );
    }

我有一个文件提供者:

<provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="br.com.[blablabla].blabla"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

而 xml 是:

<paths>
    <files-path name="br.com.[blablabla].blabla" path="app_imageDir" />
</paths>

但是当我运行这段代码时,我总是得到这个错误:

java.lang.IllegalArgumentException:

但到目前为止运气不好...那么我该如何解决这个问题并获取我的文件的 URI?

非常感谢任何帮助!

So how can I fix this and get the URI for my file?

第 1 步:删除 Java 代码中无用的东西。

第 2 步:获取 Java 代码和 file_paths 资源进行匹配,因为 file_paths 表示文件路径必须在 getFilesDir() 下并且具有app_imageDir 在里面,而你的 Java 代码没有这些东西。

所以,试试这个:

private File createImageFile() throws IOException {
    // Create an image file name
    String imageFileName = "registroFoto";
    File directory = new File(getFilesDir(), "app_imageDir");

    directory.mkdirs();

    return File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            directory
    );
}