读取相册、拍照

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

首先既然要选择图片,我们就先要获取本地所有的图片,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值