Android调用自身相机拍照并保存拍摄的照片到手机的sd卡

 

TackPhoto.java

 

package sparksoft.liang;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;

public class TackPhoto extends Activity {
	private Bitmap photo = null;
	private String fileName;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		/*
		 * photo = BitmapFactory
		 * .decodeFile("/mnt/sdcard/DCIM/100ANDRO/Chrysanthemum.jpg");
		 * SavePicInServer(photo);
		 */

		String state = Environment.getExternalStorageState(); // 判断是否存在sd卡
		if (state.equals(Environment.MEDIA_MOUNTED)) { // 直接调用系统的照相机
			Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
			startActivityForResult(intent, 0);
		} else {
			Toast.makeText(TackPhoto.this, "请检查手机是否有SD卡", Toast.LENGTH_LONG)
					.show();
		}

	}

	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		try {
			if (requestCode != 0) {
				return;
			}
			super.onActivityResult(requestCode, resultCode, data);
			// 两种方式获得拍摄照片的返回值
			Uri uri = data.getData();
			if (uri != null) {
				photo = BitmapFactory.decodeFile(uri.getPath());
			}
			if (photo == null) {
				Bundle bundle = data.getExtras();
				if (bundle != null) {
					photo = (Bitmap) bundle.get("data");
					SavePicInLocal(photo);// 保存到本地

					// 生成一个Intent对象
					Intent intent = new Intent();
					intent.putExtra("picpath", fileName);
					intent.setClass(TackPhoto.this, JcjlEditActivity.class);
					// 启动intent的Activity
					TackPhoto.this.startActivity(intent);
				} else {
					Toast.makeText(TackPhoto.this, "未拍摄照片", Toast.LENGTH_LONG)
							.show();
					// 生成一个Intent对象
					Intent intent = new Intent();
					intent.setClass(TackPhoto.this, JcjlEditActivity.class);
					TackPhoto.this.startActivity(intent);
				}
			}

		} catch (Exception e) {

		}
	}

	// 保存拍摄的照片到手机的sd卡
	private void SavePicInLocal(Bitmap bitmap) {
		FileOutputStream fos = null;
		BufferedOutputStream bos = null;
		ByteArrayOutputStream baos = null; // 字节数组输出流
		try {
			baos = new ByteArrayOutputStream();
			bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
			byte[] byteArray = baos.toByteArray();// 字节数组输出流转换成字节数组
			String saveDir = Environment.getExternalStorageDirectory()
					+ "/liangPic";
			File dir = new File(saveDir);
			if (!dir.exists()) {
				dir.mkdir(); // 创建文件夹
			}
			fileName = saveDir + "/" + System.currentTimeMillis() + ".PNG";
			File file = new File(fileName);
			file.delete();
			if (!file.exists()) {
				file.createNewFile();// 创建文件
				Log.e("PicDir", file.getPath());
				Toast.makeText(TackPhoto.this, fileName, Toast.LENGTH_LONG)
						.show();
			}
			// 将字节数组写入到刚创建的图片文件中
			fos = new FileOutputStream(file);
			bos = new BufferedOutputStream(fos);
			bos.write(byteArray);

		} catch (Exception e) {
			e.printStackTrace();

		} finally {
			if (baos != null) {
				try {
					baos.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (bos != null) {
				try {
					bos.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (fos != null) {
				try {
					fos.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

		}

	}

}


 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值