Android Чтение всех каталогов в SDCARD, который имеет изображения - PullRequest
0 голосов
/ 01 июля 2011

Я пытаюсь прочитать все изображения на SDCARD с каталогом, в котором он присутствует. например: если есть файлы TEST.jpg в / mnt / sdcard / album1 и TEST2.jpg в / mnt / sdcard / album1 / album2, я должен иметь возможность получить имя каталога album1 и album2. Я написал код, который делает это рекурсивно, это работает, когда количество папок меньше, но когда количество каталогов увеличивается, цикл просто выходит из него.

      public void getImageFoldes(String filepath){


            String albumpath;
            File file = new File(filepath);

    File[] files = file.listFiles();
    for (int fileInList = 0; fileInList < files.length; fileInList++)  
    {
        File filename;
        filename =files[fileInList];

        if(filename.isHidden()|| filename.toString().startsWith("."))
            return;

        if (filename.isDirectory()){

            albumpath = filename.toString();
            String[] split;
            String title;
            split= albumpath.split("/");
            title=split[split.length-1];
            result = new thumbnailResults();
            result.setTitle(title);
            result.setPath(albumpath);
            result.setIsLocal(true);
            //result.setCreated("05-06-2011");
            getImageFoldes(filename.toString());
        }
        else{
            if (files.length !=0)
            {
                //if File is the image file then store the album name 
                if ((files[fileInList].toString()).contains(".png")||
                        (files[fileInList].toString()).contains(".jpg")||
                        (files[fileInList].toString()).contains(".jpeg")){
                    if (!results.contains(result)){
                        result.setUri(Uri.parse(files[fileInList].getPath()));
                        results.add(result);
                        myadapter.notifyDataSetChanged();

                    }
                }       
            }
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Используйте следующий код.получить путь ко всем изображениям и каталогам с SDCard.

public static ArrayList<String> getPathOfAllImages(Activity activity) {
        ArrayList<String> absolutePathOfImageList = new ArrayList<String>();
        String absolutePathOfImage = null;
        String nameOfFile = null;
        String absolutePathOfFileWithoutFileName = null;
        Uri uri;
        Cursor cursor;
        int column_index;
        int column_displayname;
        int lastIndex;
        // absolutePathOfImages.clear();


            uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

            String[] projection = { MediaColumns.DATA,
                    MediaColumns.DISPLAY_NAME };

            cursor = activity.managedQuery(uri, projection, null, null, null);
            column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);

            column_displayname = cursor
                    .getColumnIndexOrThrow(MediaColumns.DISPLAY_NAME);

            // cursor.moveToFirst();
            while (cursor.moveToNext()) {
                // for(int i=0; i<cursor.getColumnCount();i++){
                // Log.i(TAG,cursor.getColumnName(i)+".....Data Present ...."+cursor.getString(i));
                // }
                // Log.i(TAG,"=====================================");

                absolutePathOfImage = cursor.getString(column_index);
                nameOfFile = cursor.getString(column_displayname);

                lastIndex = absolutePathOfImage.lastIndexOf(nameOfFile);

                lastIndex = lastIndex >= 0 ? lastIndex
                        : nameOfFile.length() - 1;

                absolutePathOfFileWithoutFileName = absolutePathOfImage
                        .substring(0, lastIndex);


                    if (absolutePathOfImage != null) {
                        absolutePathOfImageList.add(absolutePathOfImage);
                    }

            }


        // Log.i(TAG,"........Detected images for Grid....."
        // + absolutePathOfImageList);
        return absolutePathOfImageList;
    }
0 голосов
/ 31 июля 2012

Чтобы получить все файлы изображений с SD-карты, он может работать.

public class ReadallImagesActivity extends Activity {

    ArrayList<String> arlist = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        File ff = Environment.getExternalStorageDirectory();
        loadImagepaths(ff);
        setContentView(R.layout.main);
        Toast.makeText(ReadallImagesActivity.this, "Array size == " +arlist.size(), Toast.LENGTH_LONG).show();
    }

    public void loadImagepaths(File file) {
        for (File f : file.listFiles()) {

            if (f.isDirectory()) {
                if (f.getAbsolutePath().endsWith(".android_secure")) {
                    break;
                }
                if (f.getAbsolutePath().endsWith("DCIM")) {
                    continue;
                }
                loadImagepaths(f);
            } else {
                if (f.getAbsolutePath().endsWith(".png") ||
                    f.getAbsolutePath().endsWith(".gif") ||
                    f.getAbsolutePath().endsWith(".jpg"))
                {
                    arlist.add(f.getAbsolutePath());
                }
            }   
        }
    }
}
...