读取相册、拍照

这两天在做项目时,做到上传图片功能一块时,碰到两个问题,一个是如何获取所选图片的路径,一个是如何压缩图片,在查了一些资料和看了别人写的后总算折腾出来了,在此记录一下。

首先既然要选择图片,我们就先要获取本地所有的图片,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          }
原文地址:https://www.cnblogs.com/allin1579/p/4940341.html