代码之家  ›  专栏  ›  技术社区  ›  maxsap

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

  •  4
  • maxsap  · 技术社区  · 15 年前

    是否可以获取存储在我的Android手机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 回复  |  直到 15 年前
        1
  •  4
  •   Kevin Coppock    15 年前

    您可以为此使用文件过滤器。这是我为返回包含图像的目录列表而编写的。因此,修改它以返回图像列表应该相当简单:

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