在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式..

1.从本地相册获取照片:

一般就是写出这个方法

protected void getImageFromAlbum() {

Intent intent = new Intent(Intent.ACTION_PICK);

intent.setType("image/*");//相片类型

startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);

}

2.从照相机获取照片

一般就是写出这个方法

protected void getImageFromCamera() {

String state = Environment.getExternalStorageState();

if (state.equals(Environment.MEDIA_MOUNTED)) {

Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");

startActivityForResult(getImageByCamera, REQUEST_CODE_CAPTURE_CAMEIA);

}

else {

Toast.makeText(getApplicationContext(), "请确认已经插入SD卡", Toast.LENGTH_LONG).show();

}

}

写完这个方法后,一般我们还需要通过响应这个方法去获取图片

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == REQUEST_CODE_PICK_IMAGE) {

Uri uri = data.getData();

//to do find the path of pic

} else if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA ) {

Uri uri = data.getData();

//to do find the path of pic

} }

但是,有时候我们会发现用相机拍摄获取照片的时候,得到的 uri 是 null 的,这是因为android把拍摄的图片封装到bundle中传递回来,但是根据不同的机器获得相片的方式不太一样,可能有的相机能够通过

inten.getData()获取到uri

然后再根据uri获取数据的路径,在封装成bitmap,但有时候有的相机获取到的是null的,这时候我们该怎么办呢?

其实这时候我们就应该从bundle中获取数据,通过

(Bitmap) bundle.get("data")

获取到相机图片的bitmap数据。

为了能够同时适应上述两种情况,我们这时候就应该在获取图片时做判断了。我们可以在响应的时候做一个判断:

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == REQUEST_CODE_PICK_IMAGE) {

Uri uri = data.getData();

//to do find the path of pic by uri

} else if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA ) {

Uri uri = data.getData();

if(uri == null){

//use bundle to get data

Bundle bundle = data.getExtras();

if (bundle != null) {

Bitmap  photo = (Bitmap) bundle.get("data"); //get bitmap

//spath :生成图片取个名字和路径包含类型

saveImage(Bitmap photo, String spath);

} else {

Toast.makeText(getApplicationContext(), "err****", Toast.LENGTH_LONG).show();

return;

}

}else{

//to do find the path of pic by uri

}

}

}

后面的过程就需要通过bitmap转化成相应的图片文件了。不过得到最终的图片是被压缩了的。

public static void saveImage(Bitmap photo, String spath) {

try {

BufferedOutputStream bos = new BufferedOutputStream(

new FileOutputStream(spath, false));

photo.compress(Bitmap.CompressFormat.JPEG, 100, bos);

bos.flush();

bos.close();

} catch (Exception e) {

e.printStackTrace();

return false;

}

return true;

}

这样就能解决照相机取到的图片uri为空的状态了。但是在获取到uri为null情况下,如果想得到没有被压缩过的照片,也就是说得到的是直接从相机拍摄到的照片怎么做呢?

android开发 获取相册名称_Android开发之获取相册照片和获取拍照照片相关推荐

  1. linux用c++获取mac地址,网卡地址,网口地址,网卡序号ip地址,不使用 ioctl(sock, SIOCGIFCONF, ifc)获取网络接口名称,这个接口有时会返回-1获取不到,换方法获取

    linux用c++获取mac地址,不使用 ioctl(sock, SIOCGIFCONF, &ifc)获取网络接口名称,这个接口有时会返回-1获取不到,换方法获取 1.弃用 SIOCGIFCO ...

  2. android开发 获取相册名称_Android获取手机上各个相册名称和相片的方法

    下面是我用来获取相册名称以及内容的方法,比较猥琐的方法,但是也实现了功能 就是一个asyctask,将就参考参考,本人记录 class ScanAllImageTask extends android ...

  3. android开发 获取相册名称_android通过拍照、相册获取图片并显示 实例完整源码下载(亲测通过)...

    [实例简介]其中也包含了 将图片保存至 sd卡功能 [实例截图] [核心代码] public class MainActivity extends Activity{ private static f ...

  4. android引用的java包_Android开发中jar包的创建及引用

    jar包有两种,一种是纯粹的库功能,没有main入口函数,故无法直接执行:一种是包含main的可执行包! 如有hello/hello.java文件: $ cd hello/$ javac hello. ...

  5. android 代码设置居右_Android 开发实现EditText 光标居右显示

    Android 开发实现EditText 光标居右显示 前言: 有些时候肯定会遇到这种奇葩的需求,光标要靠右显示,因为Android里面光标默认是靠左显示的,那怎么实现呢,肯定有办法的,这里提供一种实 ...

  6. android listview 自适应列宽_Android 开发技术周报 Issue#272

    新闻/News 谷歌Pixel 4a将采用UFS 2.1存储:可以体验全套GMS [图]Android端Play商城现全面开放深色主题 教程/Tutorial OkHttp Interceptor - ...

  7. android设计个人简历页面_android开发简历工作经历填写样本

    工作经历(案例一) 工作时间:2013-08 - 2017-01 公司名称:简历本网络科技有限公司 | 所在部门: | 所在岗位:android开发工程师 工作描述: 做的项目是基于硬件基础的一套Ap ...

  8. android与mysql数据库同步_android开发 如何通过web服务器访问MYSQL数据库并且使其数据同步到android SQLite数据库?...

    通过web服务器访问MYSQL数据库有以下几个过程: 1.在MySql下创建自己的数据库和自己的表单 2.连接数据库. 3.访问数据库 1.创建web工程 (服务器端) 在Myeclipse下新建一个 ...

  9. android 开启一个定时线程_ANDROID开发中定时器的3种方法

    在android中,经常用到的定时器主要有以下几种实现: 一.采用Handler与线程的sleep(long )方法 二.采用Handler的postDelayed(Runnable, long) 方 ...

最新文章

  1. python求五个数中的最大值和最小值_python编程 求输入的10个数中的最大值和最小值,并输出它们各自是第几个...
  2. 设计模式复习-桥接模式
  3. 2016 ICPC World Finals -Ceiling Function
  4. IDE硬盘,SATA硬盘,SCSI硬盘有什么区别
  5. 1269: GPA-一题简单英文题~
  6. linux salt生成,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  7. 注解代替枚举_精选枚举代替开关
  8. 排序算法之冒泡排序,选择排序
  9. 多校一道KMP+DP的题
  10. 『飞鸽』百度悄然进军客户端领域
  11. ML《决策树(一)ID3》
  12. 初使用 ReportViewer 控件时遇到的一点小麻烦
  13. 蓝桥杯 基础练习 杨辉三角形 JAVA
  14. ctype函数_Ctype函数简介
  15. WIFI:802.11协议帧格式
  16. ipmitool 命令行重启服务器
  17. 无源领域自适应:Source Hypothesis Transfer for Unsupervised Domain Adaptation
  18. 五金机电行业供应商智慧管理平台解决方案:优化供应链管理,带动企业业绩增长
  19. 2018ChinaJoy万代南梦宫展台速刷攻略
  20. 微型计算机期末考试a卷,微机原理与接口技术期末试卷A

热门文章

  1. OpenJDK 正式宣布AWT、2D、Swing等项目解散
  2. 周末了,分享个休闲软件!你懂得!
  3. 皮一皮:原来微信备注还有这个用...
  4. 皮一皮:直男最后的倔强...
  5. 每日一皮:程序员新手尝试新框架的时候
  6. 每日一皮:程序猿的读书历程,最后一本​必备​!
  7. 自律到极致-人生才精致「第3期」:中奖结果
  8. Spring Boot中使用LDAP来统一管理用户信息
  9. react前端封装接口弹出错误_在react项目中用es6封装ajax请求,组件中调用总是报错,求解?...
  10. 提高安全意识,保护自身安全