您的位置:首页 > 移动开发 > Android开发

第二十篇 Android获取本机图片、音频、视频、文档以及本地文件夹列表

2018-01-02 09:40 1016 查看
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<ImgFolder> getImageFolders() {

List<ImgFolder> folders = new ArrayList<ImgFolder>();
// 扫描图片
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<String> mDirs = new ArrayList<String>();//用于保存已经添加过的文件夹目录
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;
4000

}
}).length;

folderBean.setCount(count);
folders.add(folderBean);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (c != null) {
c.close();
}
}
return folders;
}

/**
* 通过图片文件夹的路径获取该目录下的图片
*/
public List<String> getImgListByDir(String dir) {
ArrayList<String> 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<File> {

@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;
}

@Override
public 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调用系统文件管理器打开指定路径目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐