FileProvider.getUriForFile导致的StringIndexOutOfBound

2019-09-28 21:32发布

我已经更新我的项目实施供应商 。 整个实现似乎是正确的,但我收到StringIndexOutOfBoundsException内异常FileProvider类。

在我的情况下,意图是创建,其中,用户将选择得到他的图书馆图像或拍摄新照片。

这就是我的意图之一是创建后,包括在列表中,创建一个选择器。

    File file = getTempFile(context);
    if (file != null) {
        Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        takePhotoIntent.putExtra("return-data", true);
        takePhotoIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                FileProvider.getUriForFile(context,                        // line 43
                        BuildConfig.APPLICATION_ID.concat(".fileprovider"),
                        file));
        intentList = addIntentsToList(context, intentList, takePhotoIntent);
    }

getTempFile方法:

private static File getTempFile(Context context) {
    File imageFile = new File(context.getExternalCacheDir(), TEMP_IMAGE_NAME);
    if (imageFile.getParentFile().mkdirs()) {
        return imageFile;
    } else {
        return null;
    }
}

被抛出的异常:

java.lang.StringIndexOutOfBoundsException: length=86; index=87
     at java.lang.String.substring(String.java:1939)
     at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:728)
     at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:404)
     at com.project.helper.ImagePicker.getPickImageIntent(ImagePicker.java:43)

如何在这种情况下继续吗? 也许是在这个版本中提供的错误吗? 要遵循,我的项目的一些详细信息:

清单文件:

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

file_paths.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="images" path="Android/data/com.project/cache/tempImage" />
</paths>

buildToolsVersion '27.0.2'

Answer 1:

更换:

<external-path name="images" path="Android/data/com.project/cache/tempImage" />

有:

<external-cache-path name="images" path="." />

首先,这将是更可靠的,作为当前实施,使得在哪里假设getExternalCacheDir()点。 其次, path需要指向一个目录,而不是一个文件,我的猜测是,这是哪里的东西会横盘整理。



Answer 2:

你必须更改XML以这种方式:

<external-path name="images" path="." />


文章来源: FileProvider.getUriForFile is causing StringIndexOutOfBoundsException