如何设置 MEDIASTORE 以从 Android 特定文件夹获取图像

4

所以我有这段用于通过mediastore获取图像的代码:

int dataIndex = mMediaStoreCursor.getColumnIndex(MediaStore.Files.FileColumns.DATA );

mMediaStoreCursor.moveToPosition(position);
String dataString = mMediaStoreCursor.getString(dataIndex);
Uri mediaUri = Uri.parse("file://" + dataString);
return mediaUri;

这个代码可以获取pictures文件夹中的所有图片,但我想修改它以获取特定文件夹中的所有图片,该文件夹名称将作为一个字符串传递。例如: { android/picture/specificfolder/}


3个回答

5
val DIRECTORY_NAME = "%your_folder_name%"

val selection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
    MediaStore.MediaColumns.RELATIVE_PATH + " like ? "
else MediaStore.Images.Media.DATA + " like ? "

val selectionArgs = arrayOf(APP_RESOURCE_DIRECTORY_NAME)

val cursor = context.contentResolver.query(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        null,
        selection,
        selectionArgs,
        null)

1
请解释一下你的解决方案。仅有代码的答案往往不太受欢迎。 - Lajos Arpad
使用MediaStore从特定文件夹获取基于显示名称的精确图像的语法是什么? - Karunesh Palekar
这可能是迄今为止最好的答案。 - falero80s

3

请查看此帖子

建议使用游标并将所需的文件夹传递到投影中。

来自该帖子的相关答案:

mediaCursor = getContentResolver().query( MediaStore.Files.getContentUri("external"),
                null,
                MediaStore.Images.Media.DATA + " like ? ",
                new String[] {"%YOUR_FOLDER_NAME%"},
                null);


1
你可以使用以下方法 -
public List<String> getFromSdcard()
{
    ArrayList<String> imagePaths = new ArrayList<String>();// list of file paths
    File[] listFile;
    File file= new 

    File(android.os.Environment.getExternalStorageDirectory(),"android/picture/specificfolder/");

    if (file.isDirectory())
    {
        listFile = file.listFiles();


        for (int i = 0; i < listFile.length; i++)
        {

            imagePaths.add(listFile[i].getAbsolutePath());

        }
    }
    return imagePaths;
}

要检索图像,请使用


List<String> sample = getFromSdcard();

    for(int i=0; i<sample.size() ; i++){
      final Uri image = Uri.parse("file://"+sample(i).toString());
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接