【问题标题】:Why are images from newly created folder not showing my custom gallery为什么新创建的文件夹中的图像没有显示我的自定义画廊
【发布时间】:2021-10-01 07:33:35
【问题描述】:

如果我以编程方式创建一个文件夹并将一些图像存储在该文件夹中,那么我的自定义图库仅显示以前的文件夹,直到我重命名此文件夹。一旦我从文件管理器重命名或编辑此文件夹,所有图像都会显示。 这是我的代码

 ArrayList<imageFolder> picFolders = new ArrayList<>();
        ArrayList<String> picPaths = new ArrayList<>();
        Uri allImagesuri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        String[] projection = { MediaStore.Images.ImageColumns.DATA , MediaStore.Images.Media.DISPLAY_NAME,
                MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.BUCKET_ID};
        Cursor cursor = this.getContentResolver().query(allImagesuri, projection, null, null, null);
        try {
            if (cursor != null) {
                cursor.moveToFirst();
            }
            do{
                imageFolder folds = new imageFolder();
                String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME));
                String folder = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME));
                String datapath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));

                //String folderpaths =  datapath.replace(name,"");
                String folderpaths = datapath.substring(0, datapath.lastIndexOf(folder+"/"));
                folderpaths = folderpaths+folder+"/";
                if (!picPaths.contains(folderpaths)) {
                    picPaths.add(folderpaths);

                    folds.setPath(folderpaths);
                    folds.setFolderName(folder);
                    folds.setFirstPic(datapath);//if the folder has only one picture this line helps to set it as first so as to avoid blank image in itemview
                    folds.addpics();
                    picFolders.add(folds);
                }else{
                    for(int i = 0;i<picFolders.size();i++){
                        if(picFolders.get(i).getPath().equals(folderpaths)){
                            picFolders.get(i).setFirstPic(datapath);
                            picFolders.get(i).addpics();
                        }
                    }
                }
            }while(cursor.moveToNext());
            cursor.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

【问题讨论】:

  • 这是列出文件的代码。查看 MediaStore 包含的内容。此刻无关紧要。去掉它。将代码发布到您创建文件夹和文件的位置。你甚至都不知道你是在哪个文件夹中创建的。
  • 我使用此代码创建文件夹 File file = new File(Environment.getExternalStorageDirectory().getPath(), "My Folder/"+ System.currentTimeMillis() + ".jpg");
  • 该代码不会创建文件夹。也不是文件。

标签: android gallery image-gallery


【解决方案1】:

要将图像添加到您的画廊,您必须使用 ACTION_MEDIA_SCANNER_SCAN_FILE

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(imageFile));
requireContext().sendBroadcast(intent);

对于 API 级别 29 及以上,您必须使用MediaScannerConnection.scanFile 方法

MediaScannerConnection.scanFile(requireContext(),
                    new String[]{imageFile.toString()},
                    null,
                    null);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-15
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多