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); } }
应该还有一种拍照的实现方法,暂时没有研究过。暂时略过!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。