首页 > 代码库 > Android 拍照功能

Android 拍照功能

今天晚上从22点开始一直在那边测拍照闪退的情况,真心纠结!于是另外建了一个项目再测,发现新建的项目并没有出现闪退的情况。于是我开始卸载项目,发现重新安装后并不会出现闪退问题。上传大概3-4张照片后,又开始闪退。所以终于查出闪退的根本原因是内存不够了!

终于功夫不负有心人,发现问题所在了。还是发现问题最重要了,下面贴上代码。

 

先上传一些核心类库,用来得到一个根路径。

public class UploadImage {    // 获取sd卡根目录地址,并创建图片父目录文件对象和文件的对象;    private static String file_str = Environment.getExternalStorageDirectory().getPath();    public static File mars_file = new File(file_str + "/RZproject");}


假如已经点击了一个按钮,先是弹出一个选择框。

/** * 选择照片! */private void setPhotos() {    new AlertDialog.Builder(MainActivity.this)            .setTitle("提示").setMessage("请选择获取图片的方式")            .setNegativeButton("取消", new DialogInterface.OnClickListener() {                @Override                public void onClick(DialogInterface arg0, int arg1) {                    arg0.cancel();                }            })            .setPositiveButton("拍照", new DialogInterface.OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int id) {                    takePhotos();                }            })            .setNeutralButton("相册", new DialogInterface.OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    selectPhotos();                }    }).show();}

 

那格式真心不协调!算了,继续贴代码!

private String fileImageName;private static final int PHOTO_GRAPH = 1;private static final int PHOTO_SELECT = 2;private void takePhotos() {    // 验证sd卡是否正确安装:    if (Environment.MEDIA_MOUNTED.equals(Environment            .getExternalStorageState())) {        // 先创建父目录,如果新创建一个文件的时候,父目录没有存在,那么必须先创建父目录,再新建文件。        if (!UploadImage.mars_file.exists()) {            UploadImage.mars_file.mkdirs();        }        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        fileImageName = UploadImage.mars_file + "/" + ViewUtil.getNewGUID()                + ".jpg";        File newFile_go = new File(fileImageName);        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(newFile_go));        // 跳转到拍照界面;        startActivityForResult(intent, PHOTO_GRAPH);    } else {        //ViewUtil.showToast("找不到SD卡", false);    }}/** * 从相册选择 * */private void selectPhotos() {    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);    intent.setType("image/*");    startActivityForResult(intent, PHOTO_SELECT);}

 

接下来是选择图片之后的回调函数。

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == PHOTO_GRAPH && resultCode == RESULT_OK) {        showProgressDialog(R.string.phots_string);        new ImageThread(fileImageName).start();    } else if (requestCode == PHOTO_SELECT && resultCode == RESULT_OK) {        String path = ViewUtil.getPhotosPath(data);        copyPhotos(path);    }   }

 

应该还有一种拍照的实现方法,暂时没有研究过。暂时略过!

 

Android 拍照功能