Kotlin 扩展解决方案
这是在 Kotlin 中获取媒体文件尺寸的方法
val (width, height) = myFile.getMediaDimensions(context)
fun File.getMediaDimensions(context: Context): Pair<Int, Int>? {
if (!exists()) return null
val retriever = MediaMetadataRetriever()
retriever.setDataSource(context, Uri.parse(absolutePath))
val width = retriever.extractMetadata(METADATA_KEY_VIDEO_WIDTH).toIntOrNull() ?: return null
val height = retriever.extractMetadata(METADATA_KEY_VIDEO_HEIGHT).toIntOrNull() ?: return null
retriever.release()
return Pair(width, height)
}
如果您想让它更安全(Uri.parse 可能会抛出异常),请使用此组合。其他的通常也很有用:)
fun String?.asUri(): Uri? {
try {
return Uri.parse(this)
} catch (e: Exception) {
}
return null
}
val File.uri get() = absolutePath.asUri()
fun File.getMediaDimensions(context: Context): Pair<Int, Int>? {
if (!exists()) return 0
val retriever = MediaMetadataRetriever()
retriever.setDataSource(context, uri)
val width = retriever.extractMetadata(METADATA_KEY_VIDEO_WIDTH).toIntOrNull() ?: return null
val height = retriever.extractMetadata(METADATA_KEY_VIDEO_HEIGHT).toIntOrNull() ?: return null
retriever.release()
return Pair(width, height)
}
这里不是必需的,但通常有用的附加 Uri 扩展
val Uri?.exists get() = if (this == null) false else asFile().exists()
fun Uri.asFile(): File = File(toString())