androidの调用系统相机拍照

来源:互联网 发布:手机淘宝直通车位置 编辑:程序博客网 时间:2024/06/07 05:40

androidの调用系统相机拍照

1. 通过Intent直接调用系统相机

    1. 直接调用系统的相机应用,只需要在Intent对象中传入相应的参数即可

        MediaStore.ACTION_IMAGE_CAPTURE   拍照
        MediaStore.ACTION_VIDEO_CAPTURE    录像

    2. 使用startActivityForResult()方法,并传入上面的intent对象, 之后,

        系统自带的相机应用就会启动,用户就可以用它来拍照或者录像。

    3. 用onActivityResult()接收传回的图像,

        当用户拍完照片或者录像,或者取消后,系统都会调用这个函数。

2.  源码分析

package com.wyl.example;import java.io.File;import java.io.FileOutputStream;import java.text.SimpleDateFormat;import java.util.Date;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.graphics.Matrix;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;//定义了本实例的主要Activitypublic class MainActivity extends Activity {private static final int RESULT_CAPTURE_IMAGE = 1;// 照相的requestCodeprivate String strImgPath = "";// 照片文件绝对路径// 定义拍照的按钮private Button btnTakePhoto;// 定义预览图片的imageviewprivate ImageView ivSurface;//保存的拍照文件private File out;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 得到布局中的所有对象findView();// 设置对象的监听器setListener();}private void findView() {// 得到布局中的所有对象btnTakePhoto = (Button) findViewById(R.id.btn_takephoto);ivSurface = (ImageView) findViewById(R.id.iv_image);}// 设置对象的监听器private void setListener() {btnTakePhoto.setOnClickListener(listener);}OnClickListener listener = new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {// 拍照的按钮case R.id.btn_takephoto:cameraMethod();break;}}};//照相功能private void cameraMethod() {// 实例化拍照的IntentIntent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置图片存放的路径,Environment.getExternalStorageDirectory()得到SD卡的根目录strImgPath = Environment.getExternalStorageDirectory().toString()+ "/CONSDCGMPIC/";// 存放照片的文件夹// 给相片命名String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg";// 照片命名// 检查存放的路径是否存在,如果不存在则创建目录out = new File(strImgPath);if (!out.exists()) {out.mkdirs();}// 在此目录下创建文件out = new File(strImgPath, fileName);// 该照片的绝对路径strImgPath = strImgPath + fileName;// 启动ACITIVITYstartActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode) {case RESULT_CAPTURE_IMAGE:// 拍照// 如果返回为正确的的结果if (resultCode == RESULT_OK) {// intent.getExtras()得到intent所附带的额外数据,在这也就是拍摄的图片Bundle extras = data.getExtras();// 得到额外的数据的data字段,转化为bitmap类型Bitmap b = (Bitmap) extras.get("data");// 实例化矩阵MatrixMatrix matrix = new Matrix();// 设置缩放matrix.postScale(5f, 4f);// 创建bitmap对象,并设置bitmap的参数b = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(),matrix, true);// 设置imageview的图片资源ivSurface.setImageBitmap(b);try {// 把文件转化为outputstreamFileOutputStream outStream = new FileOutputStream(out);// 把bitmap数据写入字符流中b.compress(CompressFormat.JPEG, 100, outStream);// 关闭字符流outStream.close();} catch (Exception e) {e.printStackTrace();}}break;}}}


 3. 效果图



4. 源码下载

源码下载地址


0 0
原创粉丝点击