阅读使用相机拍摄的照片意向

问题描述:

我正在尝试阅读并显示使用相机拍摄的照片。 我的代码是基于android的文档中发现的例子:阅读使用相机拍摄的照片意向

public void takeSidePhoto(View view) { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(REQUEST_IMAGE_CAPTURE_SIDE); 
     } catch (IOException ex) { 

     } 
     if (photoFile != null) { 
      Uri photoURI = FileProvider.getUriForFile(this, "my.app.package.fileprovider", photoFile); 
      imageSide = photoURI.toString(); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE_SIDE); 
     } 
    } 
} 

private File createImageFile(int imageCaptureCode) throws IOException { 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String imageFileName = "JPEG_" + timeStamp + "_"; 
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); 
    File image = File.createTempFile(
      imageFileName, /* prefix */ 
      ".jpg",   /* suffix */ 
      storageDir  /* directory */ 
    ); 
    return image; 
} 

的问题是,传递给takePictureIntentphotoURI是(例如): file:/storage/emulated/0/Android/data/my.app.package/files/Pictures/JPEG_20160921_123241_562024049.jpg 但是,当我浏览我的检测设备存储与文件管理器,我可以看到拍摄的照片存储在: file:/storage/Android/data/my.app.package/files/Pictures/JPEG_20160921_123241_562024049.jpg

发生了什么以及如何获取真实文件的路径?

在try块
+0

'FileProvider'不会从'getUriForFile()'''''''''''file'方案返回'Uri'值。它用'content'方案返回'Uri'值。除此之外,请详细解释**您正在使用的“文件管理器”。 – CommonsWare

做这样的事情来获取路径

if(photoFile.exists()){ 
String path = photoFile.getAbsolutePath() 
} 

的takeSidePhoto()方法应具有以下内容:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
      File photoFile = null; 
      try { 
       photoFile = createImageFile(); 
       imageUri = Uri.fromFile(photoFile); 
      } catch (IOException ex) { 
       Toast.makeText(getActivity(), ex.toString(), Toast.LENGTH_SHORT).show(); 
      } 
      if (photoFile != null) { 
       takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
       startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE); 
      } 
     } else { 
      Toast.makeText(getActivity(), R.string.no_camera_error_message, Toast.LENGTH_SHORT).show(); 
     } 

而且在createImageFile()方法改变这一行File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);

与此File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

使用以下代码获取存储目录并将图像保存到路径。

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();