为什么新创建的文件夹中的图像不显示我的自定义图库



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

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();
}

要添加图像到您的图库,您必须使用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);

最新更新