当相机应用程序拍摄的照片不是照相机时,图像不会被保存

时间:2014-08-11 01:59:09

标签: android image camera gallery android-gallery

我目前正在尝试将手机拍摄的图像保存到其图库中,但只有在弹出选择器对话框时选择了相机应用程序时,以下代码才有效。每当我选择其他相机应用程序(例如Google相机)时,拍摄的照片都不会保存在任何地方。

为了让事情变得更加奇怪,有时图片会显示在图库的指定目录中,但是在15分钟左右之后,当我使用相机应用程序时也是如此:图片将保存在默认设置中相机拍摄目录,但如果它显示在那里,则会在其指定的目录中显示相当多的内容。

// Capturing Camera Image will launch camera app request image capture
void captureImage() {
    //file uri to store image.
    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

    // Request camera app to capture image
    Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    // start the image capture Intent
    getActivity().startActivityForResult(captureIntent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);

}

2 个答案:

答案 0 :(得分:2)

嗯,嗯      intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);   不再起作用了。 你应该做这样的事情: 调用相机活动:

  Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

和onActivityResult:

 if (data.getData() == null) {  
    Bitmap bm = (Bitmap)
  data.getExtras().get("data");
   String timeStamp = new SimpleDateFormat(
                            "yyyyMMdd_HHmmss").format(new Date());

  File pictureFile = new File(Environment
                            .getExternalStoragePublicDirectory(
                                    Environment.DIRECTORY_PICTURES)
                            .getAbsolutePath()
                            + File.separator + "IMG_" + timeStamp);

try {
     FileOutputStream fos = new FileOutputStream(
                                pictureFile);
    bm.compress(Bitmap.CompressFormat.JPEG, 90, fos);
    fos.close();
     String filePath = pictureFile.getAbsolutePath();
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   } catch (IOException e) {
   e.printStackTrace();
   }   } else {

   Uri imgUri =data.getData());  

}

答案 1 :(得分:0)

事实证明我的代码毕竟是有效的。图片被保存在新目录中,但问题是图库没有更新,这解释了为什么照片会随后随机出现在目录中。对此我不熟悉,我从未想过要更新画廊。在使用ES文件资源管理器浏览我的文件后,我才意识到这一点。为了解决我的问题,我在CameraFragment中创建了一个新方法,可以调用媒体扫描程序。我从onActivityResult()调用了这个方法。

这是新方法,但由于我在其他SO问题上遇到相同的代码,因此没有什么真正的“新”:

protected void mediaScan() {
    getActivity().sendBroadcast(
            new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, 
                    Uri.parse(fileUri.toString())));
}

我也不需要调用包管理器并迭代可以处理相机意图的应用程序如果我没有选择使用从库中选择图片,那么我将删除所有从我的问题来看。