如何从存储在SD卡上的图像中获取图像路径

4

我能否获取存储在安卓手机SD卡中的所有图片路径?此外,我能否检查SD卡或内部存储器中存储的其他图片?当前我的做法是这样的:

Cursor cur = this.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null,null);  
        startManagingCursor(cur);  
        cur.moveToFirst();
        while (cur.moveToNext()) {
            String str = cur.getString(cur.getColumnIndex(MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME));
            Log.e("#########",str);
        }

这似乎返回目录名称,我也见过这段代码:

File images = Environment.getDataDirectory();  
        File[] imagelist = images.listFiles(new FilenameFilter(){  
        public boolean accept(File dir, String name)  
        {  
            return ((name.endsWith(".jpg"))||(name.endsWith(".png")));  
        }  
    });  
        String []mFiles = new String[imagelist.length];  

        for(int i= 0 ; i< imagelist.length; i++)  
        {  
            mFiles[i] = imagelist[i].getAbsolutePath();  
        }  
        Uri[] mUrls = new Uri[mFiles.length];  

        for(int i=0; i < mFiles.length; i++)  
        {  
            mUrls[i] = Uri.parse(mFiles[i]);  
            Log.e("###############","MURIS: "+mUrls[i].getEncodedPath());
        }     

但是这会抛出一个空指针异常。
1个回答

4
您可以使用FileFilter来实现此功能。这是我为返回包含图像的目录列表编写的一个示例。从这里,修改它以返回图像列表应该相当简单:
FileFilter filterForImageFolders = new FileFilter() 
    {            
        public boolean accept(File folder) 
        { 
            try 
            { 
                //Checking only directories, since we are checking for files within 
                //a directory 
                if(folder.isDirectory()) 
                { 
                    File[] listOfFiles = folder.listFiles(); 

                    if (listOfFiles == null) return false; 

                    //For each file in the directory... 
                    for (File file : listOfFiles) 
                    {                            
                        //Check if the extension is one of the supported filetypes                           
                        //imageExtensions is a String[] containing image filetypes (e.g. "png")
                        for (String ext : imageExtensions) 
                        { 
                            if (file.getName().endsWith("." + ext)) return true; 
                        } 
                    }                        
                } 
                return false; 
            } 
            catch (SecurityException e) 
            { 
                Log.v("debug", "Access Denied"); 
                return false; 
            } 
        } 
    };

编辑:为了澄清,要使用此功能,您可以执行以下操作:

File extStore = Environment.getExternalStorageDirectory();
File[] imageDirs = extStore.listFiles(filterForImageFolders);

你好,kcoppock,感谢您的回复,代码运行良好,只有一件事我想问您,我添加了jpg、png扩展名到图像扩展名中,但这并没有返回dcim目录(保存从手机相机拍摄的照片的目录),您有什么想法吗?谢谢,maxsap - maxsap
我假设你的目录结构与我的类似,是DCIM\Camera这样的。因此,你会得到相机文件夹,但不会得到DCIM文件夹本身,因为相机文件夹是包含图像的文件夹,而DCIM文件夹包含包含图像的相机文件夹。这样说清楚了吗? - Kevin Coppock

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