public String getFilePath(int resultCode, Intent data, Activity context) { if (resultCode != Activity.RESULT_OK) return null; String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 throw new RuntimeException("SD card is not avaiable/writeable right now."); } Uri uri = null; if (data == null) { uri = this.cameraImgUrl; if (uri == null) throw new RuntimeException("获取相机返回的图片地址为空,请进行版本适配!"); return ImageUtil.uriToPath(context.getContentResolver(), uri); } else { uri = data.getData(); return ImageUtil.uriToPath(context.getContentResolver(), uri); } }
/** * 获取相机拍照后得到的压缩文件对象. 要求resultCode == Activity.RESULT_OK,调用者自己判断 * * @param resultCode 相机程序返回码 * @param data 相机程序返回的intent * @param context 当前操作的上下文 * @return */ public File getCameraResultFile(int resultCode, Intent data, Activity context) { if (resultCode != Activity.RESULT_OK) return null; String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 throw new RuntimeException("SD card is not avaiable/writeable right now."); } Uri uri = null; if (data == null) { uri = this.cameraImgUrl; if (uri == null) throw new RuntimeException("获取相机返回的图片地址为空,请进行版本适配!"); return ImageUtil.uriToCompressFile(context, uri); } else { uri = data.getData(); if (uri == null) { Bundle bundle = data.getExtras(); // 但发现某些4.2版本返回的是缩略图,所以在调用相机时明确指定使用外部存储,然后使用第一个分支(此时intent为null) Bitmap bitmap = (Bitmap) bundle.get("data"); // 获取相机返回的数据,并转换为Bitmap图片格式 return ImageUtil.bitMapToCompressFile(bitmap); } else { return ImageUtil.uriToCompressFile(context, uri); } } }