这两天在做项目时,做到上传图片功能一块时,碰到两个问题,一个是如何获取所选图片的路径,一个是如何压缩图片,在查了一些资料和看了别人写的后总算折腾出来了,在此记录一下。
首先既然要选择图片,我们就先要获取本地所有的图片,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); 20 21 22 break ; 23 } 24 25 default : 26 break ; 27 } |