Android开发——相册拍照_03.解决相机拍照之后部分手机无法将图片保存到路径或部分手机点击相机确定无法返回问题
2017-01-10 21:09
1301 查看
之前用了02的方法,实现了相册拍照功能,但是在测试的时候发现几个问题:1.拍完照片之后,返回界面,但是显示出来的图片为null,一片空白;2.拍完照片之后,点击相机的确定键,无法返回。
因为时间有限,网上的回答很多,第一个问题有人说部分手机没有SD卡?第二个问题有人说部分手机无法使用系统公用路径?也有人说这两个都是后面一个原因?
于是打算使用另一种方法,使用弹出框。
当点击图片控件时,弹出弹出框,让用户选择是通过拍照或是通过相册选择。
然后主要是看调用相机拍照并保存到指定目录这个方法callCameraTakePhoto()
无论哪一张方法进行图片选择,在选择完成之后,都会调用onActivityResult这个方法
上述代码块的后面部分与02的内容是一样的,对图片进行缩放处理,用到的类和方法也都在02里有写,这里就不重复了。
在callCameraTakePhoto方法中有调用一个方法进行查询并创建文件夹:
这样处理之后,经过测试,暂时没有什么问题,拍照之后的图片也有正常的显示出来,当然,6.0的系统需要动态添加权限。
因为时间有限,网上的回答很多,第一个问题有人说部分手机没有SD卡?第二个问题有人说部分手机无法使用系统公用路径?也有人说这两个都是后面一个原因?
于是打算使用另一种方法,使用弹出框。
当点击图片控件时,弹出弹出框,让用户选择是通过拍照或是通过相册选择。
img.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getPictureDialog(); } });
private void getPictureDialog() { new AlertDialog.Builder(this).setTitle("请选择获取图片方式") .setItems(Resources.ApplyCourier.items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = null; switch (which) { case 0: // 调用相机拍照并保存拍照文件到指定目录 callCameraTakePhoto(); break; case 1: // 图片单选,直接跳转至系统图片库 intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, Resources.ApplyCourier.SELECT_IMAGE); break; } dialog.dismiss(); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).show(); }
然后主要是看调用相机拍照并保存到指定目录这个方法callCameraTakePhoto()
/** * 调用相机拍照并存储照片 */ private void callCameraTakePhoto() { String photoName = null; // 路径规则:SD卡路径(内部存储)/packageName/DJGX/ + photoName photoName = "imagewx.png"; photoSavePath = Resources.ApplyCourier.PHOTO_FILE_PATH + File.separator + photoName; init_pic_dir(Resources.ApplyCourier.PHOTO_FILE_PATH); // 查询并创建文件夹 // 启动相机并拍照 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(photoSavePath))); startActivityForResult(intent, Resources.ApplyCourier.CALL_CAMERA); }
无论哪一张方法进行图片选择,在选择完成之后,都会调用onActivityResult这个方法
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { Options opts = new Options(); String path = null; switch (requestCode) { case Resources.ApplyCourier.CALL_CAMERA: // 调用相机拍照 if (data == null) { path = photoSavePath; } else { // 这部分代码可以不用写,正常通过相机拍照返回,得到的data为null Uri address = data.getData(); path = GetRealPathFromUri.getImageAbsolutePath(ApplyCourierActivity.this, address); } break; case Resources.ApplyCourier.SELECT_IMAGE: // 调用系统图库选择 if (data != null) { // 获取相册选择结果(保存路径) Uri address = data.getData(); path = GetRealPathFromUri.getImageAbsolutePath(ApplyCourierActivity.this, address); } else { Toast.makeText(ApplyCourierActivity.this, "图片选择出错", Toast.LENGTH_LONG).show(); return; } break; } opts.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, opts); int inSampleSize = ChooseImageUtils.calculateInSampleSize(opts, dpTopx(reqWidth), dpTopx(100)); opts.inSampleSize = inSampleSize; opts.inJustDecodeBounds = false; Bitmap bitmap = Bit 4000 mapFactory.decodeFile(path, opts); Log.e("path", path); img.setImageBitmap(bitmap); } }
上述代码块的后面部分与02的内容是一样的,对图片进行缩放处理,用到的类和方法也都在02里有写,这里就不重复了。
在callCameraTakePhoto方法中有调用一个方法进行查询并创建文件夹:
/** * 查询指定路径文件是否存在,若不存在就直接创建 * * @param path * 指定路径 */ private void init_pic_dir(String path) { File d = new File(path + File.separator); if (!d.exists()) { d.mkdirs(); } }
这样处理之后,经过测试,暂时没有什么问题,拍照之后的图片也有正常的显示出来,当然,6.0的系统需要动态添加权限。
相关文章推荐
- Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题
- Android开发中调用系统相册上传图片到服务器OPPO等部分手机上出现短暂的显示桌面问题的解决方法
- Android部分手机拍照上传返回为空处理,和拍照后图片压缩后保存到指定路径下
- Android--利用相机或相册截取用户头像(解决了miui无法截取,以及部分机型拍照无返回Uri)【下】
- Android--利用相机或相册截取用户头像(解决了miui无法截取,以及部分机型拍照无返回Uri)【上】
- Android--利用相机或相册截取用户头像(解决了miui无法截取,以及部分机型拍照无返回Uri)【下】
- Android自定义拍照解决部分手机拍完之后图片不清楚的问题
- Android--利用相机或相册截取用户头像(解决了miui无法截取,以及部分机型拍照无返回Uri)【上】
- Android部分手机拍照后获取的图片被旋转问题的解决方法
- Android 解决部分手机拍照后获取的图片被旋转的问题
- Android拍照和从相册获取图片(解决android7.0打开相机崩溃的问题),同时也解决了拍完照后图片方向不正的问题
- Android拍照和从相册获取图片(解决android7.0打开相机崩溃的问题),同时也解决了拍完照后图片方向不正的问题
- 解决Android部分手机图片剪切返回崩溃问题
- android拍照后图片路径的获取(解决不同手机存在拍照后旋转的问题)
- android开发拍照点击保存无法返回上一界面
- android调用系统相机和相册进行拍照裁剪处理,解决不同安卓版本存在无法加载相册的问题,处理了是否有sd卡的存在的情况
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- 解决不同类型手机系统照相机拍照无法确定返回问题
- 解决Android调用系统相机拍照后相片无法在相册中显示问题