读取相册、拍照
这两天在做项目时,做到上传图片功能一块时,碰到两个问题,一个是如何获取所选图片的路径,一个是如何压缩图片,在查了一些资料和看了别人写的后总算折腾出来了,在此记录一下。
首先既然要选择图片,我们就先要获取本地所有的图片,Android已经为我们封装好了该意图。
|
1
2
3
4
5
|
1 Intent intent = new Intent(Intent.ACTION_PICK, null);//从列表中选择某项并返回所有数据2 intent.setDataAndType(3 MediaStore.Images.Media.EXTERNAL_CONTENT_URI,//得到系统所有的图片4 "image/*");//图片的类型,image/*为所有类型图片5 startActivityForResult(intent, PHOTO_GALLERY); |
然后我们重写onActivityResult方法。
在Android1.5后系统会调用MediaScanner服务进行后台扫描,索引歌曲,图片,视频等信息,并将数据保存在android.provider.MediaStore.Images.Thumbnails 和android.provider.MediaStore.Video.Thumbnails这两个数据库中。
所以我们需要使用Activity.managedQuery(uri, projection, selection, selectionArgs, sortOrder)方法从数据中获取相应数据。
uri: 需要返回的资源索引
projection: 用于标识有哪些数据需要包含在返回数据中。
selection: 作为查询符合条件的过滤参数,类似于SQL语句中Where之后的条件判断。
selectionArgs: 同上。
sortOrder: 对返回信息进行排序。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
1 @Override 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) 3 { 4 switch (requestCode) 5 { 6 //请求为获取本地图品时 7 case PHOTO_GALLERY: 8 { 9 //图片信息需包含在返回数据中10 String[] proj ={MediaStore.Images.Media.DATA};11 //获取包含所需数据的Cursor对象 12 @SuppressWarnings("deprecation")13 Cursor cursor = managedQuery(data.getData(), proj, null, null, null); 14 //获取索引15 int photocolumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);16 //将光标一直开头17 cursor.moveToFirst();18 //根据索引值获取图片路径19 String path = cursor.getString(photocolumn);202122 break;23 }24 25 default:26 break;27 } |

浙公网安备 33010602011771号