我们在android开发过程中 经常有做到发图片或修改上传头像的功能 即要调用系统相册 如何调用系统相册并处理返回的数据呢?因为随着android手机系统的提高 不同系统的手机对调用相册并处理相册不同,所以我们就要做处理 让它可以兼容所有不同版本及系统的手机。

方法/步骤

  1. 进行相册有两种方式:一种是直接进入相册

    public static Intent INTENT_ACTION_PICK() {

    Intent intent = new Intent(Intent.ACTION_PICK,

    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    intent.setType("image/*");

    return intent;

    }

    另一种是直接进入相册目录

    public static Intent INTENT_ACTION_CONTENT() {

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT,

    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    intent.setType("image/*");

    return intent;

    }

    startActivityForResult(intent,PICTURE);

  2. 写一个回调方法接收返回相册的路径

    public interface PhotoCallBack {   void onSuccess(String picturePath);// 拿取相片成功   void onFailure();// 拿取相片失败

    }

    这里写成回调方法的原因是 我们在开发过程中不仅仅是一个模块用到调用系统相册 写成一个回调方法 并在在一个类里处理返回的数据

  3. 根据SDK_INT来分类处理相册返回相片路径

    public static void getPhotoURLByAlbum(Context context, Intent data,      PhotoCallBack callback) {   if (data == null) {      callback.onFailure();      return;   }   final Uri selectedImage = data.getData();   if (selectedImage == null) {      callback.onFailure();      return;   }   String picturePath = "";   // 关于Android4.4的图片路径获取,如果回来的Uri的格式有两种   if (Build.VERSION.SDK_INT >= 19         && DocumentsContract.isDocumentUri(context, selectedImage)) {      String wholeID = DocumentsContract.getDocumentId(selectedImage);      String id = wholeID.split(":")[1];      String[] column = { MediaStore.Images.Media.DATA };      String sel = MediaStore.Images.Media._ID + "=?";      Cursor cursor = context.getContentResolver().query(            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel,            new String[] { id }, null);      if (cursor.moveToNext()) {         int columnIndex = cursor.getColumnIndex(column[0]);         picturePath = cursor.getString(columnIndex);         callback.onSuccess(picturePath);// 获取图片路径      }      cursor.close();   } else {      String[] projection = { MediaStore.Images.Media.DATA };      Cursor cursor = context.getContentResolver().query(selectedImage,            projection, null, null, null);      if (cursor.moveToNext()) {         int column_index = cursor               .getColumnIndex(MediaStore.Images.Media.DATA);         picturePath = cursor.getString(column_index);         callback.onSuccess(picturePath);// 获取图片路径         Log.e("aa", "aa");      }      cursor.close();   }}

  4. 根据返回的相片路径URL来获得我们需要的Bitmap 我们就可以在ImageView直接显示了

    public static Bitmap getBitmapByURL(String PhotoURL) {   BitmapFactory.Options options = new BitmapFactory.Options()   options.inJustDecodeBounds = false;   Bitmap bitmap = BitmapFactory.decodeFile(PhotoURL, options);   if (bitmap != null) {      return bitmap;   }   return null;}   //   // 把图片保存到我们的系统图库中

    public static void saveMyImageToGallery(Context context, Bitmap bmp) {    File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");    if (!appDir.exists()) {        appDir.mkdir();    }    String fileName = System.currentTimeMillis() + ".jpg";    File file = new File(appDir, fileName);    try {        FileOutputStream fos = new FileOutputStream(file);        bmp.compress(CompressFormat.JPEG, 100, fos);        fos.flush();        fos.close();    } catch (FileNotFoundException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();       try {        MediaStore.Images.Media.insertImage(context.getContentResolver(),            file.getAbsolutePath(), fileName, null);    } catch (FileNotFoundException e) {        e.printStackTrace();    }}

photo的更多相关文章

  1. 在 Windows 10 中启用 Windows Photo Viewer

    本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!原文地址:http://www.cnblogs.com/cxun/p/4727323.html 不知大家在使用了Win10之后有没有这样感受 ...

  2. Autodesk的照片建模云服务—Autodesk ReCap 360 photo 的测试数据

    之前已经给大家介绍过了Autodesk的照片建模云服务—Autodesk ReCap 360 photo, 你也可以自己登录到http://recap360.autodesk.com/ 自己试一试. ...

  3. 如何申请Autodesk ReCap 360 photo的云币(Cloud Credit)

    在之前的博客中我介绍过Autodesk的照片建模云服务—Autodesk ReCap 360 photo,通过Autodesk ReCap 360 photo,你可以非常方便的通过照片生成三维模型.如 ...

  4. Autodesk的照片建模云服务—Autodesk ReCap 360 photo

    现实捕捉技术方兴未艾,简单的讲现实捕捉技术就是把现实中的现状信息数字化到计算机中以便做进一步的处理.对于不同的应用目的会有不同的捕捉设备,工程或传媒娱乐行业中经常用到的肯定就是三维模型了.那如何得到三 ...

  5. iOS开发之保存照片到系统相册(Photo Album)

    iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIIma ...

  6. mongo里面根据对象字段的ID查询 db.Photo.find({'owner.$id':ObjectId('xxxx')}) , 并且使用forEach循环修改查询的数据

    var ones = db.Photo.find({'owner.$id':ObjectId("5344f0dab7c58e8e098b4567")}) db.Photo.find ...

  7. iOS - Photo Album 图片/相册管理

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIImagePickerController : UINavigationController <NSCod ...

  8. WordPress Pretty Photo插件‘hashrel’参数跨站脚本漏洞

    漏洞名称: WordPress Pretty Photo插件‘hashrel’参数跨站脚本漏洞 CNNVD编号: CNNVD-201311-405 发布时间: 2013-11-28 更新时间: 201 ...

  9. 数据结构(线段树):BZOJ 3126: [Usaco2013 Open]Photo

    3126: [Usaco2013 Open]Photo Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 222  Solved: 116 Descrip ...

  10. [PWA] 18. Clean the photo cache

    We cannot let photo always keep caching new data without clean the old data. If message is not displ ...

随机推荐

  1. SQL Server 给表和字段添加说明

    .添加表说明 EXECUTE sp_addextendedproperty N'MS_Description','表说明',N'user',N'dbo',N'table',N'表名',NULL,NUL ...

  2. IOS开发创建开发证书及发布App应用(九)——等待审核(审核几种状态)

    以下是App应用的几种状态,如果看不到英文,建议复制到网站翻译一下就行,意思差不多能明白的 以上整套流程是在2013年写的,可能有些地方已经不太一样了,只是给大家做一下参考,毕竟再怎么改大概流程还是差 ...

  3. codeforces 372E. Drawing Circles is Fun

    tags:[圆の反演][乘法原理][尺取法]题解:圆の反演:将过O点的圆,映射成不过O的直线,相切的圆反演出来的直线平行.我们将集合S中的点做反演变换:(x,y)->(x/(x^2+y^2), ...

  4. PPT自动载入图片并矩阵分布

    最近有学生问到,能不能快速的向PPT一个页面里插入成百张图片,并让它们按统一大小的矩形排布到页面上.我写了以下代码可以在第1页中按照指定横向和纵向矩形数目,填充指定路径下的图片. Sub LoadPi ...

  5. jQ伪类选择器

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  6. php基础知识--2017-04-14

    1.Php的两种打开方式: 第一种方式:http://localhost/0414/qq.php 第二种:新建站点,选到www目录.点击服务器----+添加-------选择本地网络   ------ ...

  7. React组件实现越级传递属性

    如果有这样一个结构:三级嵌套,分别是:一级父组件.二级子组件.三级孙子组件,且前者包含后者,结构如图: 如果把一个属性,比如color,从一级传递给三级,一般做法是使用props逐一向下传递,代码如下 ...

  8. ios系统判断某些适配 __IPHONE_OS_VERSION_MAX_ALLOWED

    由于app的最新设计字体是ios9之后的平方字体,但app最低支持ios7,so...想在常量配置文件类里统一适配下字体,如下: //适配字体,ios9及以上系统使用新字体--平方字体 #if __I ...

  9. Virtualbox mac版centos7.2 安装共享文件夹

    因为用的是mac本,在自己电脑上用virtualbox安装了centos7.2 虚拟机,为了实现与本机交换文件,需要用到贡享文件夹功能. 网上搜的时候多是windows版的,所以自己写一个mac版的. ...

  10. Angular2.js——表单(下)

    这部分是接表单上部分的内容,主要内容有: 1.添加自定义的CSS来提供视觉反馈: 2.显示和隐藏有效性验证的错误信息: 3.使用ngSubmit处理表单提交: 4.禁用表单提交按钮. 添加自定义的CS ...