很多应用程序都可能会使用到调用摄像头拍照和从相册选取图片的功能,今天我们开始android中摄像头与相册调用的学习。

目录导航

  1. 调用摄像头拍照
  2. 从相册中选择照片
  3. 友情链接

调用摄像头拍照

大致流程:调用相机拍照,然后剪辑,之后再在imageView中显示。项目结构如下:

aaarticlea/png;base64,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" alt="" />

一、 一些初始化的代码:

public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
public static final int CHOOSE_PHOTO = 3;
private ImageView picture;
private Uri imageUri; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
picture = (ImageView) findViewById(R.id.picture);
}

二、 创建文件:

// 创建File对象,用于存储拍照后的图片
private File createImageFile(String fileName) {
File outputImage = new File(Environment.getExternalStorageDirectory(), fileName);
try {
if (outputImage.exists()) {
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
return outputImage;
}

三、 调用系统相机拍照,

// 调用系统相机拍照,并创建一张jpg文件
public void takePhone(View view) {
imageUri = Uri.fromFile(createImageFile("takephone.jpg"));
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO); // 启动相机程序
}

四、 onActivityResult方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case TAKE_PHOTO:
phoneTake(resultCode);
break;
case CROP_PHOTO:
phoneCrop(resultCode);
break;
case CHOOSE_PHOTO:
phoneChoose(resultCode, data);
break;
default:
break;
}
}

五、 phoneTake方法:

// 拍照的回调
private void phoneTake(int resultCode) {
if (resultCode == RESULT_OK) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO); // 启动裁剪程序
}
}

六、 phoneCrop方法,裁剪的回调

// 裁剪的回调
private void phoneCrop(int resultCode) {
if (resultCode == RESULT_OK) {
try {
BufferedInputStream inputStream = new BufferedInputStream(getContentResolver().openInputStream(imageUri));
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
picture.setImageBitmap(bitmap); // 将裁剪后的照片显示出来
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

七、 声明权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

从相册中选择照片

一、 从相册中选择照片:

// 从相册中选择照片:
public void choosePhone(View view) {
imageUri = Uri.fromFile(createImageFile("choosephone.jpg"));
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra("crop", true);
intent.putExtra("scale", true);
startActivityForResult(intent, CHOOSE_PHOTO);
}

二、 从相册中选取图片,再显示

// 从相册中选取图片,再显示
private void phoneChoose(int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
ContentResolver resolver = getContentResolver();
Uri originalUri = data.getData();
try {
Bitmap photo = MediaStore.Images.Media.getBitmap(resolver, originalUri);
if (photo != null) {
picture.setImageBitmap(photo);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

友情链接

android基础---->摄像头与相册的调用的更多相关文章

  1. 使用HTML5+调用手机摄像头和相册

    前言:前端时间使用HTML5做了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了不少时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法简 ...

  2. Android基础总结(10)——手机多媒体的运用:通知、短信、相机、视频播放

    Android提供了一系列的API,是我们可以在程序中调用很多手机的多媒体资源,从而编写出更加丰富的应用程序. 1.通知的使用 通知(Notification)是Android中比较有特色的一个功能, ...

  3. iOS摄像头和相册-UIImagePickerController-浅析(转)

    iOS摄像头和相册-UIImagePickerController-浅析(转) 转自: http://blog.sina.com.cn/s/blog_7b9d64af0101cfd9.html 在一些 ...

  4. Android基础新手教程——4.1.1 Activity初学乍练

    Android基础新手教程--4.1.1 Activity初学乍练 标签(空格分隔): Android基础新手教程 本节引言: 本节開始解说Android的四大组件之中的一个的Activity(活动) ...

  5. Android基础测试题(二)

    今天给大家带来的是Android基础测试题(二) 题目要求: 定义一个5位长度的整型数组并初始化,然后构建方法根据用户传入的数字判断是否存在数组中,如果存在,返回所在位置,如果不存在,返回-1 首先第 ...

  6. html5调取手机摄像头或相册

    html5调用手机摄像头或者相册 由于input的type=file 格式的文件的界面并不是我们所希望的界面,所以在此我隐藏input,自定义样式,这个样式就在<a>中自己定义,这里我就不 ...

  7. iOS摄像头和相册-UIImagePickerController常用操作

    在一些应用中,我们需要用到iOS设备的摄像头进行拍照,视频.并且从相册中选取我们需要的图片或者视频. 关于iOS摄像头和相册的应用,可以使用UIImagePickerController类来完成控制. ...

  8. 深入理解gradle编译-Android基础篇

    深入理解gradle编译-Android基础篇 导读 Gradle基于Groovy的特定领域语言(DSL)编写的一种自动化建构工具,Groovy作为一种高级语言由Java代码实现,本文将对Gradle ...

  9. android基础---->JSON数据的解析

    上篇博客,我们谈到了XML两种常用的解析技术,详细可以参见我的博客(android基础---->XMl数据的解析).网络传输另外一种数据格式JSON就是我们今天要讲的,它是比XML体积更小的数据 ...

随机推荐

  1. Qt5 can't find -LGL

    一周前新建了一个有关Ubuntu QT5 的虚拟机开发环境,在官网上下载了一个完整的run包,然后编译的时候发现如下错误 can't find -LGL 解决方式: sudo apt-get inst ...

  2. [uart]2.tty和uart的函数调用流程

    以下是在include/uapi/linux/tty.h中定义了现有的线规号,如果需要定义新的,则需要在后面添加新的 /* line disciplines */ #define N_TTY 0 #d ...

  3. Tomcat性能优化之(一) 启动GZIP压缩

    Tomcat性能优化之(一) 启动GZIP压缩 1:设置TOMCAT启用GZIP压缩,通过浏览器HTTP访问对应的资源会根据配置进行压缩. <Connector port="8080& ...

  4. openwrt使用list

    openwrt中用到双向无头链表,实际应用时应在外部定义实体链表头,后续可直接应用链表函数(宏定义已将链表头排除在外): static struct list_head timeouts = LIST ...

  5. lvm 新建一个vg 逻辑卷 配置启动

    fdisk /dev/sdb 格式 t  8e w vgcreate datavg /dev/sdb1lvcreate -L 999G -n lvdata datavgmkfs.xfs /dev/da ...

  6. 基于Python的测试驱动开发实战

    近年来测试驱动开发(TDD)受到越来越多的关注.这是一个持续改进的过程,能从一开始就形成规范,帮助提高代码质量.这是切实可行的而非天马行空的. TDD的全过程是非常简单的.借助TDD,代码质量会得到提 ...

  7. Android Activity 传递数据

    activity中数据的传递方式有2中,一种是使用putExtra()传递,另外一种是传递Bundle对象,使用putExtras()方法. 方法一 发送数据 putExtra()传送的是键值对,第一 ...

  8. 编写一个Filter,除继承HttpServlet类外还需要( )。

    A.继承Filter 类 B.实现Filter 接口 C.继承HttpFilter 类 D.实现HttpFilter接口 解答:B

  9. Sublime Text 3安装清爽主题(著名的Soda Theme)

    Sublime Text是一款强大的编辑器,不但拥有众多强大的功能,还拥有很多漂亮的主题以及大量的插件可供配置使用. 本文主要描述Sublime Text 3安装清爽的主题,默认的深色主题Monoka ...

  10. Solr with Apache Tomcat

    配置教程 1 http://www.duntuk.com/how-install-apache-solr-46-apache-tomcat-7-use-drupal https://www.gotos ...