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);
}

 

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

@Override
protected 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);
    }   
}

 

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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。