Android获取手机上各个相册名称和相片的方法

这篇博客分享了一种实现获取Android设备上相册名称及相片内容的方法,通过一个简单的AsyncTask实现,虽然方法较为简单,但能有效达到目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是我用来获取相册名称以及内容的方法,比较猥琐的方法,但是也实现了功能

就是一个asyctask,将就参考参考,本人记录

class ScanAllImageTask extends android.os.AsyncTask<Boolean, Integer, List<CircleAlbumItem>>{

		@Override
		protected List<CircleAlbumItem> 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<CircleAlbumItem> albums = new ArrayList<CircleAlbumItem>(); 
	        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<CircleAlbumItem> result) {
			super.onPostExecute(result);
			circleAlbumDatas = result;
			CircleAlbumAdapter circleAlbumAdapter = new CircleAlbumAdapter();
			mGridViewCircleAlbum.setAdapter(circleAlbumAdapter);
		}
		
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值