android获取图片文件信息

Oct 9 2014

最近项目里需要一个图片上传的功能,本来只要调用系统图库选择图片,通过Intent就可以获取数据,但是因为需要自定义选择界面,所以只有自己实现一个了。

下面讲下大概的实现思路:

Android的图片资源都是通过Media Provider接口来获取的。Android系统的媒体服务会扫描系统存储的图片文件,然后将相关的元数据保存在数据库中。这些信息是通过ContentProvider暴露出来的,所以只要通过ContentResolver查询相关的表就能找到SD卡上所有文件的信息了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private List<ImageMediaModel> queryImageMediaModels() {
final String orderBy = MediaStore.Images.Media.DATE_TAKEN + " desc";
final String[] columns = {
MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID };
Cursor cursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
columns, null, null, orderBy);
ArrayList<ImageMediaModel> mediaModelList = new ArrayList<ImageMediaModel>();
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
mediaModelList.add(ImageMediaModel.fromCursor(cursor));
}
return mediaModelList;
}

ImageMediaModel

1
2
3
4
5
6
7
8
9
10
11
12
13
public class ImageMediaModel {
public String url = null;
public boolean status = false;
public ImageMediaModel(String url, boolean status) {
this.url = url;
this.status = status;
}
public static ImageMediaModel fromCursor(Cursor cursor) {
String url = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
return new ImageMediaModel(url, false);
}
}
`

这里是直接获取图片的原始路径,除此之外还可以获取图片目录、缩略图等其他信息。


Kommentare: