遍历图片文件,返回目录集合

来源:互联网 发布:一架箜篌多少钱知乎 编辑:程序博客网 时间:2024/06/05 16:38

使用Android自身的LoaderManager

public class MediaStoreHelper {  //所有图片的目录放在第一个位置  public final static int INDEX_ALL_PHOTOS = 0;  //是否查找gif图片  public final static String EXTRA_SHOW_GIF = "SHOW_GIF";  public static void getPhotoDirs(FragmentActivity activity, Bundle args, PhotosResultCallback resultCallback) {    activity.getSupportLoaderManager().initLoader(0, args, new PhotoDirLoaderCallbacks(activity, resultCallback));  }  //LoaderManager的回调  static class PhotoDirLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> {    private WeakReference<Context> context;    private PhotosResultCallback resultCallback;    public PhotoDirLoaderCallbacks(Context context, PhotosResultCallback resultCallback) {      this.context = new WeakReference<>(context);      this.resultCallback = resultCallback;    }    @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) {      return new PhotoDirectoryLoader(context.get(), args.getBoolean(EXTRA_SHOW_GIF, false));    }    @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) {      if (data == null)  return;      List<PhotoDirectory> directories = new ArrayList<>();      PhotoDirectory photoDirectoryAll = new PhotoDirectory();      photoDirectoryAll.setName(context.get().getString(R.string.publish_all_photo));      photoDirectoryAll.setId("ALL");      while (data.moveToNext()) {        //图片id        int imageId  = data.getInt(data.getColumnIndexOrThrow(_ID));        //目录id        String bucketId = data.getString(data.getColumnIndexOrThrow(BUCKET_ID));        //目录名称        String name = data.getString(data.getColumnIndexOrThrow(BUCKET_DISPLAY_NAME));        String path = data.getString(data.getColumnIndexOrThrow(DATA));        PhotoDirectory photoDirectory = new PhotoDirectory();        photoDirectory.setId(bucketId);        photoDirectory.setName(name);        if (!directories.contains(photoDirectory)) {          photoDirectory.setCoverPath(path);          photoDirectory.addPhoto(imageId, path);          photoDirectory.setDateAdded(data.getLong(data.getColumnIndexOrThrow(DATE_ADDED)));          directories.add(photoDirectory);        } else {          directories.get(directories.indexOf(photoDirectory)).addPhoto(imageId, path);        }        photoDirectoryAll.addPhoto(imageId, path);      }      if (photoDirectoryAll.getPhotoPaths().size() > 0) {        photoDirectoryAll.setCoverPath(photoDirectoryAll.getPhotoPaths().get(0));      }      directories.add(INDEX_ALL_PHOTOS, photoDirectoryAll);      if (resultCallback != null) {        resultCallback.onResultCallback(directories);      }    }    @Override public void onLoaderReset(Loader<Cursor> loader) {    }  }  public interface PhotosResultCallback {    void onResultCallback(List<PhotoDirectory> directories);  }}

具体的查询参数设置

public class PhotoDirectoryLoader extends CursorLoader {  final String[] IMAGE_PROJECTION = {      Media._ID,      Media.DATA,      Media.BUCKET_ID,      Media.BUCKET_DISPLAY_NAME,      Media.DATE_ADDED  };  public PhotoDirectoryLoader(Context context, boolean showGif) {    super(context);    setProjection(IMAGE_PROJECTION);    setUri(Media.EXTERNAL_CONTENT_URI);    setSortOrder(Media.DATE_ADDED + " DESC");    setSelection(        MIME_TYPE + "=? or " + MIME_TYPE + "=? or "+ MIME_TYPE + "=? " + (showGif ? ("or " + MIME_TYPE + "=?") : ""));    String[] selectionArgs;    if (showGif) {      selectionArgs = new String[] { "image/jpeg", "image/png", "image/jpg","image/gif" };    } else {      selectionArgs = new String[] { "image/jpeg", "image/png", "image/jpg" };    }    setSelectionArgs(selectionArgs);  }}

调用方式

        mDirectories = new ArrayList<>();        Bundle mediaStoreArgs = new Bundle();        mediaStoreArgs.putBoolean(MediaStoreHelper.EXTRA_SHOW_GIF, false);        MediaStoreHelper.getPhotoDirs(this, mediaStoreArgs, new MediaStoreHelper.PhotosResultCallback() {            @Override public void onResultCallback(List<PhotoDirectory> dirs) {                mDirectories.clear();                mDirectories.addAll(dirs);                //等目录初始化结束后再添加选中图片所在的目录                for (int i = 0; i < selectPhotoList.size(); i++) {                    addSelectDirectories(selectPhotoList.get(i));                }            }        });

目录对象比较是否为同一个对象

0 0
原创粉丝点击