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