getExternalFilesDir返回不一致的目录

时间:2017-08-19 18:30:46

标签: android kotlin android-fileprovider

我有一个允许用户下载图片的动作,我将它们保存到我应用的数据目录中。

我像这样创建临时文件:

@Throws(IOException::class)
fun Context.createPrivateMediaFile(prefix: String, extension: String): File {
    val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
    val imageFileName = "${prefix}_${timeStamp}_"
    val storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES)
    return File.createTempFile(imageFileName, extension, storageDir)
}

我这样使用它:

try {
    photoFile = createPrivateMediaFile(".png")
} catch (e: IOException) {
    errorRef = e
} finally {
    if (photoFile == null) {
        callback(null)
    } else {
        tempFilePath = photoFile.absolutePath
        L.d("Temp image path $tempFilePath")
        // File created; proceed with request
        val photoURI = FileProvider.getUriForFile(this,
                BuildConfig.APPLICATION_ID + ".provider",
                photoFile)
        photoFile.outputStream().use { resource.compress(Bitmap.CompressFormat.PNG, 100, it) }
        callback(photoURI)
    }
}

目的是在我的数据目录中创建一个新文件,保存文件,然后通过回调发出uri。

这种方法大部分时间都有效,但我已经得到了无法解析uri的报告。在这些情况下,打印错误是:

Failed to find configured root that contains /storage/emulated/0/Android/data/com.pitchedapps.frost/files/Fotos/Frost_20170819_111929_1351301627.png

我的文件提供程序包含以下路径:

<external-path
    name="Frost_images"
    path="Android/data/com.pitchedapps.frost/files/Pictures" />

所以Fotos文件夹的来源对我来说很奇怪。这个错误也发生在我身上一次,所以它不应该是一个语言环境问题。

那么为什么getExternalFilesDir似乎会返回不同的路径呢?有没有办法获得一个确保保持一致的基础数据目录?

另一个例子是以下路径错误:

Failed to find configured root that contains /data/data/com.pitchedapps.frost/cache/Frost_20170819_115054_2013474631.png

以下是我的

full activity source code

和我的

media utils

0 个答案:

没有答案