下面是我用来获取相册名称以及内容的方法,比较猥琐的方法,但是也实现了功能
就是一个asyctask,将就参考参考,本人记录
class ScanAllImageTask extends android.os.AsyncTask>{
@Override
protected List doInBackground(Boolean... params) {
// 指定要查询的uri资源
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// 获取ContentResolver
ContentResolver contentResolver = CircleAlbum.this.getContentResolver();
// 查询的字段
String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA};
// 条件
String selection = MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=? or "
+ MediaStore.Images.Media.MIME_TYPE + "=?";
// 条件值(這裡的参数不是图片的格式,而是标准,所有不要改动)
String[] selectionArgs = { "image/jpeg", "image/bmp", "image/png" };
// 排序
String sortOrder = MediaStore.Images.Media.DATA + " asc";
// 查询sd卡上的图片
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArgs, sortOrder);
List albums = new ArrayList();
if (cursor != null) {
CircleAlbumItem album = null;
String tempFolderPath = "";
cursor.moveToFirst();
do{
String imagePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
if(!tempFolderPath.equals(getFolderPath(imagePath))){
//若文件夹名相同,则先保存之前的album
if(album != null){
albums.add(album);
}
tempFolderPath = getFolderPath(imagePath);
album = new CircleAlbumItem();
album.setCoverPhotoPathId(cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID)));
album.setPhotoAlbumName(getFolderName(tempFolderPath));
album.setPhotoNum(1);
}
else{
album.setPhotoNum(album.getPhotoNum()+1);
}
}while(cursor.moveToNext());
// 关闭cursor
cursor.close();
}
return albums;
}
private String getFolderPath(String filePath){
int endIndex = filePath.lastIndexOf(File.separator);
return filePath.substring(0, endIndex);
}
private String getFolderName(String folderPath){
int startIndex = folderPath.lastIndexOf(File.separator)+1;
return folderPath.substring(startIndex);
}
@Override
protected void onPostExecute(List result) {
super.onPostExecute(result);
circleAlbumDatas = result;
CircleAlbumAdapter circleAlbumAdapter = new CircleAlbumAdapter();
mGridViewCircleAlbum.setAdapter(circleAlbumAdapter);
}
}