我正在使用
MediaStore
开发自定义图库应用程序。我想访问设备存储上的所有图像和视频,包括隐藏的 .folders
中的文件。
我的问题是我不明白如何通过 MediaStore 获取隐藏文件。
我使用以下光标来获取所有媒体文件:
//define fields to interact
val fieldExternalContentUri: Uri = MediaStore.Files.getContentUri("external")
val fieldData = MediaStore.MediaColumns.DATA //path on disk
val fieldMimeType = MediaStore.MediaColumns.MIME_TYPE
val fieldTimeAdded = MediaStore.MediaColumns.DATE_ADDED
val fieldTimeModiifed = MediaStore.MediaColumns.DATE_MODIFIED
//set projection
val projection = arrayOf(
fieldData,
fieldMimeType,
fieldTimeAdded,
fieldTimeModiifed
)
//set sort order where newest files will be first
val sortOrder = "${MediaStore.MediaColumns.DATE_ADDED} DESC"
//create cursor object
val cursor: Cursor? = context.contentResolver.query(
fieldExternalContentUri,
projection,
null,
null,
sortOrder
)
它可以工作,但不会返回隐藏的项目。我需要更改什么才能获取所有媒体文件(包括隐藏的媒体文件)?
UPD:隐藏文件夹不包含
.nomedia
文件,它只是以点开头。
在研究了媒体存储数据库(在我的例子中它位于
/data/data/com.android.providers.media.module/databases/external.db
)之后,我注意到隐藏文件没有缓存在Images
和Videos
表中,而只缓存在Files
表中。
因此,我认为需要完全访问共享存储,而不仅仅是Photos and Videos
,才能访问隐藏文件夹。
我尝试授予 MANAGE_EXTERNAL_STORAGE
权限,是的,之后它就开始工作了。