android获取本机图片文件夹,即相册,以及相册下的所有图片的方法,贴出工具类,方便后续使用,效果图就类似百度网盘上传图片的 选择相册界面和点击某个相册选择图片的界面.

FileManager类:

public class FileManager {private static FileManager mInstance;private static Context mContext;private static ContentResolver mContentResolver;public static FileManager getInstance(Context context) {    if (mInstance == null) {        synchronized (FileManager.class) {            if (mInstance == null) {                mInstance = new FileManager();                mContext = context;                mContentResolver = context.getContentResolver();            }        }    }    return mInstance;}/** * 得到图片文件夹集合 */public List getImageFolders() {    List folders = new ArrayList();    // 扫描图片    Cursor c = null;    try {        c = mContentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null,                MediaStore.Images.Media.MIME_TYPE + "= ? or " + MediaStore.Images.Media.MIME_TYPE + "= ?",                new String[]{"image/jpeg", "image/png"}, "date_modified desc");        List mDirs = new ArrayList();//用于保存已经添加过的文件夹目录        while (c.moveToNext()) {            String path = c.getString(c.getColumnIndex(MediaStore.Images.Media.DATA));// 路径            File parentFile = new File(path).getParentFile();            if (parentFile == null)                continue;            String dir = parentFile.getAbsolutePath();            if (mDirs.contains(dir)) {//如果已经添加过                //追加三张图片                for (ImgFolder folder : folders) {                    if (folder.getDir().equals(dir)) {//取出当前文件夹                        String[] imgPaths = folder.getPreFourImgPath().split(",");                        if (imgPaths.length >= 4) {                            break;                        } else {                            folder.setPreFourImgPath(folder.getPreFourImgPath() + path + ",");                        }                    }                }                continue;            }            mDirs.add(dir);//添加到保存目录的集合中            ImgFolder folderBean = new ImgFolder();            folderBean.setDir(dir);            folderBean.setPreFourImgPath(path + ",");            if (parentFile.list() == null)                continue;            int count = parentFile.list(new FilenameFilter() {                @Override                public boolean accept(File dir, String filename) {                    if (filename.endsWith(".jpeg") || filename.endsWith(".jpg") || filename.endsWith(".png")) {                        return true;                    }                    return false;                }            }).length;            folderBean.setCount(count);            folders.add(folderBean);        }    } catch (Exception e) {        e.printStackTrace();    } finally {        if (c != null) {            c.close();        }    }    return folders;}/** * 通过图片文件夹的路径获取该目录下的图片 */public List getImgListByDir(String dir) {    ArrayList imgPaths = new ArrayList<>();    File directory = new File(dir);    if (directory == null || !directory.exists()) {        return imgPaths;    }    File[] files = directory.listFiles();    //对文件进行排序    Arrays.sort(files, new FileComparator());    for (File file : files) {        String path = file.getAbsolutePath();        if (FileManager.isPicFile(path)) {            imgPaths.add(path);        }    }    return imgPaths;}/** * 是否是图片文件 */public static boolean isPicFile(String path) {    path = path.toLowerCase();    if (path.endsWith(".jpg") || path.endsWith(".jpeg") || path.endsWith(".png")) {        return true;    }    return false;}class FileComparator implements Comparator {    @Override    public int compare(File lhs, File rhs) {        if (lhs.lastModified() < rhs.lastModified()) {            return 1;        } else {            return -1;        }    }}}

ImageFolder类:

public class ImgFolder {/**当前文件夹的路径*/private String dir;/**前四张图片的路径,用逗号分隔*/private String preFourImgPath;/**文件夹名*/private String name;/**文件夹中图片的数量*/private int count;public String getDir() {    return dir;}public void setDir(String dir) {    this.dir = dir;    int lastIndex = dir.lastIndexOf("/");    this.name = dir.substring(lastIndex + 1);}public String getPreFourImgPath() {    return preFourImgPath;}public void setPreFourImgPath(String preFourImgPath) {    this.preFourImgPath = preFourImgPath;}public String getName() {    return name;}public int getCount() {    return count;}public void setCount(int count) {    this.count = count;}public void setName(String name) {    this.name = name;}public ImgFolder() {}public ImgFolder(String dir, String preFourImgPath, String name, int count) {    this.dir = dir;    this.preFourImgPath = preFourImgPath;    this.name = name;    this.count = count;}@Overridepublic String toString() {    return "ImgFolder{" +            "dir='" + dir + '\'' +            ", preFourImgPath='" + preFourImgPath + '\'' +            ", name='" + name + '\'' +            ", count=" + count +            '}';}}

获取音频、视频、文档等,参考:
http://blog.csdn.net/chay_chan/article/details/76984665

获取本地文件夹列表,参考:
http://blog.csdn.net/junzia/article/details/41649063

相关知识链接: 媒体库
http://blog.csdn.net/dlwh_123/article/details/23337913

1.Images表:主要存储images信息。
2.Thumbnails表:这个表和images表是有直接关系的。主要存储图片的缩略图,Android为每一张保存进系统的图片文件都会自动生成一张缩略图文件。
3.Video表:主要存储视频信息了。和images表类似。
4.Videothumbnails表:存储视频的缩略图信息。这个和thumbnails表类似。
5.Audio表:音频信息比视频信息和图片信息要稍微复杂一些,主要是存储了一些专辑(album)、歌手(artists)信息,而专辑和歌手信息是单独的表格存储的,audio其实是一个视图,真正的音频数据信息存储在audio_meta表格中。
6.Albums表:主要存储专辑信息。
7.Artists表:主要存储歌手信息。
8.audio_playlists视图:媒体库的播放列表。
9.audio_media视图:真正的音频数据存储在这里。

补充:如果不想搞那么复杂,可以直接intent调用系统文件管理器打开指定路径目录。

更多相关文章

  1. android关于图片缩放
  2. Mac通过Android aapt解析apk包名、版本号、权限等信息
  3. Android技术积累:图片异步加载
  4. Android基于多触控的图片缩放和拖动代码实现
  5. Android的图片上传
  6. Android 平台上拍照/录像,图片/视频选择,编辑和压缩的一站式解决方
  7. Android Webview upload 图片上传

随机推荐

  1. 用WordPress决定jQuery的版本?
  2. jQuery无法从localhost检索数据
  3. 如何使用jquery ajax获取api数据?
  4. 用jquery 绑定一个按钮click事件后,第一次
  5. Jquery中的队列函数quene()、dequene()、
  6. JQUERY中做表单验证,谁有带时间的日期选择
  7. 请问jquery如何选择tr下的n个tr?
  8. 如何检测jQuery中的水平滚动?
  9. jquery自定义事件
  10. Symfony 2在用户站点上动态添加字段以形