我有一个允许用户下载图片的动作,我将它们保存到我应用的数据目录中。
我像这样创建临时文件:
@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
。
以下是我的
和我的