【发布时间】:2018-06-02 17:29:48
【问题描述】:
我正在尝试在回收站视图中加载来自 sdcard 的所有视频文件。我也想要视频的缩略图,所以这是我检索视频缩略图的代码
var thumbColumns = arrayOf(MediaStore.Video.Thumbnails.DATA)
fun getThumbnailPathForLocalFile(fileId:Long): String?{
var thumbCursor: Cursor? = null
try {
thumbCursor = contentResolver.query(
MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
thumbColumns, MediaStore.Video.Thumbnails.VIDEO_ID + " = "
+ fileId, null, null)
if (thumbCursor!!.moveToFirst()) {
Toast.makeText(applicationContext, thumbCursor.getString(thumbCursor
.getColumnIndex(MediaStore.Video.Thumbnails.DATA)),Toast.LENGTH_LONG).show()
return thumbCursor.getString(thumbCursor
.getColumnIndex(MediaStore.Video.Thumbnails.DATA))
}
} finally {
thumbCursor?.close()
}
return null
}
方法返回如下路径/storage/emulated/0/DCIM/.thumbnails/1526834275076.jpg
以下是我尝试使用 glide 加载图像的方式
video.thumbnailUrl 是/storage/emulated/0/DCIM/.thumbnails/1526834275076.jpg
1)
GlideApp.with(context)
.load(Uri.fromFile(File(video.thumbnailUrl)))
.into(holder.thumbnail)
2)
GlideApp.with(context)
.load("file:///"+video.thumbnailUrl)
.into(holder.thumbnail)
3)
GlideApp.with(context)
.load("file://"+video.thumbnailUrl)
.into(holder.thumbnail)
4)
GlideApp.with(context)
.load(video.thumbnailUrl)))
.into(holder.thumbnail)
Picasso 也是如此。我什至尝试使用旧版本的Glide,但仍然没有。大多数 Stack Overflow 问题都提到了第一种方式,但它对我不起作用。我尝试了从 19 到 27 的所有 Android 版本,但无法加载图像。
对于所有情况,我都没有得到这样的文件或目录,但显然该文件存在,否则我将无法从 getThumbnailPathForLocalFile 函数中获取路径。我已经添加了读取存储权限。我获取视频缩略图的方式是否正确?
【问题讨论】:
-
我没有用这个,有开发者会告诉你解决方案。
-
manifest里面的read external storage权限怎么样? Android 6+ 的运行时权限代码?
-
@greenapps 我已经这样做了。如果我没有包含权限,那么我怎么能得到缩略图的路径。问题在于 Glide 和 Picasso
-
您从媒体商店获得了该路径。要获得该路径,您不需要权限。
-
以bumptech.github.io/glide/doc/debugging.html 开头,您需要提供更多关于具体失败原因的详细信息
标签: android picasso android-glide mediastore