android获取并显示camera拍摄或者本地图库的照片

2017-08-28 14:47:19来源:网络收集作者:程序诗人人点击

分享

最近项目在搞用户图片上传功能,要从本地选择图片或者camera拍摄的图片显示预览并上传,之前为了方便一直想着用别人的轮子来造车,结果各种问题,要么应用崩溃,要么适配性极差,最后没办法,只能返璞归真,使用系统提供的方式来获取照片.然而,开发并不是一帆风顺的,网上提供的解决方案都是使用bitmap获取图片,得到的图片分辨率比较低,虽然网上找了很多文章,但很多都是答非所问,又或者一大堆问题,还不如自己慢慢琢磨研究.

在之前找了好多参考文章之后,都没能解决问题,有点绝望,没想到自己琢磨倒是搞好了.下面分享一波,也记录一下,方便日后使用.


先来看看最终实现的效果吧:


android获取并显示camera拍摄或者本地图库的照片                     
                   android获取并显示camera拍摄或者本地图库的照片

效果比较简单,只涉及到图片uri获取和展示,至于文件上传一般都是通过文件路径得到file,然后上传,本文并不介绍上传功能,大家可以自行研究,文章重点只为解决获取camera和本地图片模糊问题,下面来具体说明一下实现思路.

调用系统相机并设置输出路径
 这里理解起来并不困难,直接看代码吧:private void takePhoto() {
//跳转到新的Activity去拍照片
//进来时就同时拥有两个权限,调用系统拍照
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
Intent photoIn = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String out_file_path = SAVED_IMAGE_DIR_PATH;
File dir = new File(out_file_path);
if (!dir.exists()) {
dir.mkdirs();
}
capturePath = dir.getAbsolutePath() + "/" + Calendar.getInstance().getTimeInMillis() + ".jpg";
loge("要保存图片的路径为===="+capturePath);
File file = new File(capturePath);
photoIn.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
photoIn.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(photoIn, TAKE_PHOTO_REQUEST);
} else {
Toast.makeText(getApplicationContext(), "请确认已经插入SD卡", Toast.LENGTH_LONG).show();
}
}

通过MediaStore.EXTRA_OUTPUT方法可以设置拍照图片的输出路径,方便定位图片位置和使用

访问系统图库并返回图片uri

 访问系统图库有多种方式,这里使用Intent.GET_ACTION_CONTENT,然后筛选image类型的资源,如下所示:


private void getSystemImage() {
Intent localIntent = new Intent();
localIntent.setType("image/*");
/* 使用Intent.ACTION_GET_CONTENT这个Action */
localIntent.setAction(Intent.ACTION_GET_CONTENT);
/* 取得相片后返回本画面 */
startActivityForResult(localIntent, CUT_PICTURE);
}
下面就要探究一下如何在onActivityResult()方法中接收图片数据的问题了.获取返回的图片uri


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台