如何使用 MediaStore 访问隐藏媒体?

问题描述 投票:0回答:1

我正在使用

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
文件,它只是以点开头。

android mediastore
1个回答
0
投票

在研究了媒体存储数据库(在我的例子中它位于

/data/data/com.android.providers.media.module/databases/external.db
)之后,我注意到隐藏文件没有缓存在
Images
Videos
表中,而只缓存在
Files
表中。 因此,我认为需要完全访问共享存储,而不仅仅是
Photos and Videos
,才能访问隐藏文件夹。 我尝试授予
MANAGE_EXTERNAL_STORAGE
权限,是的,之后它就开始工作了。

© www.soinside.com 2019 - 2024. All rights reserved.