Android中的拍照常用的有两种:

  • 拍照获取缩略图
    private static final int ACTION_TAKE_PHOTO_S = 2;    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);    startActivityForResult(takePictureIntent, ACTION_TAKE_PHOTO_S);        }    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {    if(requestCode==ACTION_TAKE_PHOTO_S&&resultCode==RESULT_OK){            Bundle extras = data.getExtras();            mImageBitmap = (Bitmap) extras.get("data");            mImageView.setImageBitmap(mImageBitmap);        }    }
  • 拍照获取原图
private static final int ACTION_TAKE_PHOTO_B = 1;Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//TODO f是拍照后照片保存的文件        File f = null;//TODO 保存文件名,拍照完成后获取图片要用到        mCurrentPhotoPath = f.getAbsolutePath();                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,                        Uri.fromFile(f));        startActivityForResult(takePictureIntent, ACTION_TAKE_PHOTO_B );        }    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {    if(requestCode==ACTION_TAKE_PHOTO_S&&resultCode==RESULT_OK){            //TODO 到这里拍摄的图片已经保存到指定的文件中了        }        }

对于图片的缩放,可以参考
http://blog.csdn.net/guchuanhang/article/details/43835585

  • 对拍照逻辑的封装
package com.example.android.photobyintent;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import android.annotation.TargetApi;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.ExifInterface;import android.net.Uri;import android.os.Build;import android.os.Environment;import android.provider.MediaStore;import android.util.Log;import android.widget.Toast;@TargetApi(Build.VERSION_CODES.ECLAIR)public class CameraUtil {    private static final String JPEG_FILE_PREFIX = "IMG_";    private static final String JPEG_FILE_SUFFIX = ".jpg";    private static final String CAMERA_DIR = "/dcim/";    /**该方法需要在onActivityResult进行处理 * @return filePath */    public static String takePictureIntent(Context packageContext,            int requestCode) {        String imgFilePath = null;        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        if (takePictureIntent.resolveActivity(packageContext                .getPackageManager()) == null) {            Toast.makeText(packageContext, "抱歉您没有相机APP,无法拍照~",                    Toast.LENGTH_LONG).show();        } else {            File f = null;            try {                f = setUpPhotoFile(packageContext);                imgFilePath = f.getAbsolutePath();                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,                        Uri.fromFile(f));            } catch (IOException e) {                e.printStackTrace();                f = null;            }            ((Activity) packageContext).startActivityForResult(                    takePictureIntent, requestCode);        }        return imgFilePath;    }    @TargetApi(Build.VERSION_CODES.FROYO)    private static File setUpPhotoFile(Context context) throws IOException {        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA)                .format(new Date());        String imageFileName = JPEG_FILE_PREFIX + timeStamp + "_";        File albumF = null;        if (Environment.MEDIA_MOUNTED.equals(Environment                .getExternalStorageState())) {            String albumName = context.getString(R.string.app_name);            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {                albumF = new File(                        Environment                                .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),                        albumName);            } else {                albumF = new File(Environment.getExternalStorageDirectory()                        + CAMERA_DIR + albumName);            }            if (albumF != null) {                if (!albumF.mkdirs()) {                    if (!albumF.exists()) {                        Log.d("CameraSample", "failed to create directory");                        return null;                    }                }            }        } else {            Log.v(context.getString(R.string.app_name),                    "External storage is not mounted READ/WRITE.");        }        File imageF = File.createTempFile(imageFileName, JPEG_FILE_SUFFIX,                albumF);        return imageF;    }    /** 将图片加入图库 */    public static void img2Galley(Context context, String imgPath) {        Intent mediaScanIntent = new Intent(                "android.intent.action.MEDIA_SCANNER_SCAN_FILE");        File f = new File(imgPath);        if (f != null) {            Uri contentUri = Uri.fromFile(f);            mediaScanIntent.setData(contentUri);            context.sendBroadcast(mediaScanIntent);        }    }    @TargetApi(Build.VERSION_CODES.ECLAIR)    public static Bitmap getThumbnail(String filePath) {        Bitmap thumbBitmap = null;        ExifInterface exif;        try {            exif = new ExifInterface(filePath);            byte[] imageData = exif.getThumbnail();            thumbBitmap = BitmapFactory.decodeByteArray(imageData, 0,                    imageData.length);        } catch (IOException e) {            e.printStackTrace();        }        return thumbBitmap;    }}

封装的这个工具类中,takePictureIntent调用相机拍照,保存原图并返回图片路径。需要在页面的onActivityResult调用 CameraUtil.img2Galley(this, filePath);将图片添加到图库中。
最后需要在Manifest中添加如下参数。

<uses-feature android:name="android.hardware.camera" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

本文主要参考地址:
http://developer.android.com/training/camera/photobasics.html#TaskScalePhoto
Demo下载地址:
http://download.csdn.net/detail/guchuanhang/9500418

更多相关文章

  1. Android(安卓)Stdio实现点击按钮出现图片
  2. android之文件的写入与读取
  3. android截取屏幕图
  4. Android(安卓)保存浏览记录 SharedPreTools
  5. 【Android】ImageMap,图片地图
  6. android 下载文件图片圆形进度条
  7. android图片异步加载 列表
  8. android:通过选择相册或者拍照获取照片
  9. Android(安卓)setBrightness value

随机推荐

  1. Android EditText inputType与numeric属
  2. Android Handler 机制详解
  3. 我的android开发之路
  4. 【边做项目边学Android】知识点:Adapter适
  5. [Android L]SEAndroid增强Androd安全性背
  6. android jni 理解
  7. HOWTO install and setup Android NDK fo
  8. android中使用线程池和临时缓存优化网络
  9. android 中 Error:Could not find suppor
  10. [Android]获取未安装的APK图标