Android 如何从Environment.directory\u中的目录获取所有图像并在自定义库中显示

Android 如何从Environment.directory\u中的目录获取所有图像并在自定义库中显示,android,android-image,android-gallery,android-cursor,Android,Android Image,Android Gallery,Android Cursor,我正在为我的申请制作定制申请厨房。从我的自定义相机捕获图像,并将图像保存在xyz目录中,该目录位于Environment.directory\u PICTURES中。我想访问所有这些图像并显示在定制厨房回收视图中。我尝试了很多方法,但无法获得图像。请帮助我修复此功能,谢谢 File fileX = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()

我正在为我的申请制作定制申请厨房。从我的自定义相机捕获图像,并将图像保存在xyz目录中,该目录位于Environment.directory\u PICTURES中。我想访问所有这些图像并显示在定制厨房回收视图中。我尝试了很多方法,但无法获得图像。请帮助我修复此功能,谢谢

   File fileX = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(), "xyz");
        projection = new String[]{MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.DATA, MediaStore.Images.Media.BUCKET_DISPLAY_NAME};

        Cursor cursor = getContentResolver().query(FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID + ".provider", fileX),
                projection, null, null,null);

 //            private final String[] projection = new String[]{ MediaStore.Images.Media.DISPLAY_NAME,  MediaStore.Images.Media.BUCKET_DISPLAY_NAME};

        if (cursor == null) {
            message = handler.obtainMessage();
            message.what = commonVariables.ERROR;
            message.sendToTarget();
            return;
        }

        ArrayList<Image> temp = new ArrayList<>(cursor.getCount());
        File file;
        folders = new ArrayList<>();

        if (cursor.moveToLast()) {
            do {
                if (Thread.interrupted()) {
                    return;
                }

                 long id = cursor.getLong(cursor.getColumnIndexOrThrow(projection[0]));
                String name = cursor.getString(cursor.getColumnIndexOrThrow(projection[1]));
                String path = cursor.getString(cursor.getColumnIndexOrThrow(projection[2]));
                String bucket = cursor.getString(cursor.getColumnIndexOrThrow(projection[3]));
                DebugLog.e("MSG: PATH = > " + name );
//                    file = new File(path);
//                    DebugLog.e("MSG: Absolute PATH = > " + file.getAbsolutePath());
//                    if (file.exists()) {
//                        Image image = new Image(id, name, path, false);
//                        temp.add(image);
//
//                        if (folderMode) {
//                            Folder folder = getFolder(bucket);
//                            if (folder == null) {
//                                folder = new Folder(bucket);
//                                folders.add(folder);
//                            }
//
//                            folder.getImages().add(image);
//                        }
//                    }
File fileX=新文件(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(),“xyz”);
投影=新字符串[]{MediaStore.Images.Media.\u ID,MediaStore.Images.Media.DISPLAY\u NAME,MediaStore.Images.Media.DATA,MediaStore.Images.Media.BUCKET\u DISPLAY\u NAME};
Cursor Cursor=getContentResolver().query(FileProvider.getUriForFile(getApplicationContext(),BuildConfig.APPLICATION_ID+“.provider”,fileX),
投影,空,空,空);
//私有最终字符串[]投影=新字符串[]{MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
if(游标==null){
message=handler.obtainMessage();
message.what=commonVariables.ERROR;
message.sendToTarget();
返回;
}
ArrayList temp=newArrayList(cursor.getCount());
文件;
folders=newarraylist();
if(cursor.moveToLast()){
做{
if(Thread.interrupted()){
返回;
}
long id=cursor.getLong(cursor.getColumnIndexOrThrow(投影[0]);
字符串名称=cursor.getString(cursor.getColumnIndexOrThrow(投影[1]);
字符串路径=cursor.getString(cursor.getColumnIndexOrThrow(投影[2]);
stringbucket=cursor.getString(cursor.getColumnIndexOrThrow(投影[3]);
DebugLog.e(“MSG:PATH=>”+名称);
//文件=新文件(路径);
//DebugLog.e(“MSG:absolutepath=>”+file.getAbsolutePath());
//if(file.exists()){
//图像=新图像(id、名称、路径、false);
//临时添加(图像);
//
//if(folderMode){
//Folder Folder=getFolder(bucket);
//如果(文件夹==null){
//文件夹=新文件夹(bucket);
//文件夹。添加(文件夹);
//                            }
//
//folder.getImages().add(图像);
//                        }
//                    }
它给我参数异常_ID不存在。

请尝试此解决方案:

private void getImages() {
    String uri = MediaStore.Images.Media.DATA;
    // if GetImageFromThisDirectory is the name of the directory from which image will be retrieved
    String condition = uri + " like '%/xyz/%'";
    String[] projection = {uri, MediaStore.Images.Media.DATE_ADDED,
            MediaStore.Images.Media.SIZE};
    try {
        Cursor cursor = getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection,
                condition, null, null);
        if (cursor != null) {
            boolean isDataPresent = cursor.moveToFirst();
            if (isDataPresent) {
                do {
                    Log.e("ImagePath>>>", cursor.getString(cursor.getColumnIndex(uri)));
                } while (cursor.moveToNext());
            }
            if (cursor != null) {
                cursor.close();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
不要忘记在
AndroidManifest.xml中设置权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


如果有任何问题,请留下评论!回答很酷,但您知道我们如何使用游标访问这些图像或特定目录。太棒了……Thanxxx人……告诉我“like“%/xyz/%”是什么意思?
like“%/xyz/%”用于匹配您的特定目录