gun*_*ess 5 android android-contentresolver
我正在从图库中选择图像,并通过ContentResolverAPI 查询其大小,它返回29kb。
但是,当我使用adb通过adb检查文件时,文件大小ls -al为44kb
这是我查询图像尺寸的方法:
private fun getFileInfo(contentResolver: ContentResolver, fileUri: Uri): Pair<String, Long>? {
val projection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.SIZE)
val metaCursor = contentResolver.query(fileUri, projection, null, null, null)
metaCursor?.use {
if (it.moveToFirst()) {
val displayNameIndex = it.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)
val sizeIndex = it.getColumnIndex(MediaStore.MediaColumns.SIZE)
return Pair(it.getString(displayNameIndex), it.getLong(sizeIndex))
}
}
return null
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Oreo模拟器。我还通过模拟器的工具进行了检查,另一方面,文件浏览器显示为29kb,而文件详细信息显示为45kb。到底是怎么回事?
这是文件浏览器中的图像:
另一个注意事项,每次在带有Android 26-Oreo模拟器的模拟器上使用相机应用程序时,上述情况都可以重现,但是对于Android 25-Nougat模拟器也可以。
我已经检查过,新的Document API也返回29kb
小智 6
我有类似的问题。ContentResolver 低估了真实文件大小约 400 字节。我使用与如何正确获取 android.net.Uri 的文件大小?中解释的类似方法解决了这个问题。:
ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(imageUri, "r");
fileLength = pfd.getStatSize();
pfd.close();
Run Code Online (Sandbox Code Playgroud)
Dut*_*n18 -1
Android 8.0 (Oreo) 引入了“SDCardFS”文件系统,它取代了 /sdcard 分区上的“FUSE”。
这个新文件系统可能具有较大的簇大小,因此无法准确分配 29kb,而是分配大于 29kb 的最小块,在您的情况下为 44.*kb。
和文件详细信息之间的差异ls -al可能是由于舍入不同造成的。
| 归档时间: |
|
| 查看次数: |
395 次 |
| 最近记录: |