【发布时间】:2018-01-17 14:02:31
【问题描述】:
我正在从图库中挑选一张图片并通过ContentResolver API 查询其大小,它返回 29kb。
但是,当我使用 ls -al 通过 adb 检查文件时,它是 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
}
我正在使用奥利奥模拟器。 我还通过模拟器的工具进行了检查,文件浏览器显示为 29kb,另一方面文件详细信息显示为 45kb。 怎么回事?
以下是来自文件浏览器的图片:
另一方面,在带有 Android 26-Oreo 模拟器的模拟器上使用相机应用程序时,上述情况每次都可以重现,但在模拟器 Android 25-Nougat 上则可以。
我检查过了,新的Document API 也返回 29kb
【问题讨论】:
-
您是否尝试强制媒体存储重新扫描?可能大小已更改,但未在数据库中更新
-
@Selvin 是 Google API 模拟器,所以无法运行 root 命令,但重启了模拟器。
-
根命令?我很确定
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE不需要root -
@Selvin 你的评论我试过了,没有帮助。
-
不是因为一个是文件的真实大小,一个是文件在存储上占用的空间吗?
标签: android android-contentresolver