来自SD卡上的文件夹中的图像

时间:2010-10-16 00:29:15

标签: android

我有一个应用程序需要从sdcard上的应用程序创建的文件夹中读取图像(sdcard /“foldername”/“filename.jpg”。我不知道文件的名称是什么,因为用户指定文件的名称。我需要从文件夹中读取图像并制作类似默认图像查看器的内容。我想先将它们读入网格视图但1)无法弄清楚如何从文件夹中动态读取它们2)如何我会像默认查看器一样实现图像选项吗?如果有办法在某个文件夹上打开默认查看器会有所帮助。 任何输入都会令人惊讶地工作了一段时间。 谢谢

1 个答案:

答案 0 :(得分:7)

以下是如何从存储卡中获取文件夹列表:

String state = Environment.getExternalStorageState();
if(state.contentEquals(Environment.MEDIA_MOUNTED) || state.contentEquals(Environment.MEDIA_MOUNTED_READ_ONLY)) 
{
    String homeDir = Environment.getExternalStorageDirectory();
    File file = new File(homeDir);
    File[] directories = file.listFiles();
} 
else 
{
    Log.v("Error", "External Storage Unaccessible: " + state);
}

这段代码来自我的脑海,所以有些语法可能会有些偏差,但总体思路应该有效。您可以使用类似的方法将文件夹过滤到仅包含图像的文件夹:

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[] directories = file.listFiles(filterForImageFolders);

这应该只返回包含图像的目录。希望这有助于一些人!