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