android查询所有照片,Android查询外部存储中所有照片
最近寫了個自定義相冊模塊,其中比較核心的算是查詢照片了,直接上代碼吧
val contentUri = MediaStore.Files.getContentUri("external")
val sortOrder = MediaStore.Files.FileColumns.DATE_MODIFIED + " DESC"
val selection =
"(${MediaStore.Files.FileColumns.MEDIA_TYPE} = ? OR ${MediaStore.Files.FileColumns.MEDIA_TYPE} = ?) AND ${MediaStore.MediaColumns.SIZE} > 0"
val selectionAllArgs = arrayOf(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE.toString())
val projections = arrayOf(
MediaStore.Files.FileColumns._ID,
MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DISPLAY_NAME,
MediaStore.MediaColumns.DATE_MODIFIED, MediaStore.MediaColumns.MIME_TYPE,
MediaStore.MediaColumns.WIDTH, MediaStore.MediaColumns.HEIGHT,
MediaStore.MediaColumns.SIZE, MediaStore.Video.Media.DURATION
)
val cursor = context.contentResolver.query(contentUri, projections, selection, selectionAllArgs, sortOrder) ?: return
if (cursor.moveToFirst()) {
val idCol = cursor.getColumnIndex(MediaStore.MediaColumns._ID)
val pathCol = cursor.getColumnIndex(MediaStore.MediaColumns.DATA)
val nameCol = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)
val mimeType = cursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE)
do {
val id = cursor.getString(idCol)
//這里得到path其實就可以利用glide來顯示照片了,但還是建議用uri
val path = cursor.getString(pathCol)
val name = cursor.getString(nameCol)
val type = cursor.getString(mimeType)
//過濾gif
if (name.endsWith(".gif", true)) {
continue
}
//過濾視頻
if (type.contains("video")) {
continue
}
val file = File(path)
if (!file.exists() || !file.isFile) {
continue
}
//這里拿到uri
val uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id)
//這里可以對照片進行分類操作,
...
} while (cursor.moveToNext())
}
cursor.close()
數據庫查詢要放到工作線程處理,而且別忘了申請外部存儲讀寫權限
總結
以上是生活随笔為你收集整理的android查询所有照片,Android查询外部存储中所有照片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php实现文字向左跑马灯,js实现文字跑
- 下一篇: 数据结构--栈--浏览器前进后退应用