将照片保存到SD无创建文件

时间:2017-11-22 09:19:30

标签: java android

我正在尝试以下方法:

1. Click a button to take a photo.
2. Save photo.
3. Add photo into the gallery.
4. Show photo into an ImageView.

14工作正常,但我遇到了23的问题。

这是我的代码:

photoFile = createImageFile();

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = timeStamp;
    File imageFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), imageFileName + ".jpg");

    mCurrentPhotoPath = imageFile.getAbsolutePath();

    return imageFile;
}

有了这个,我创建了一个我想存储图像的文件路径。

现在我用额外的参数调用Intent来存储图像:

if (photoFile != null) {                   
    Uri photoURI = FileProvider.getUriForFile(getContext(),
                     "es.antonio.prueba.fileprovider",
                     photoFile);
     takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
    startActivityForResult(takePhotoIntent, REQUEST_CAMERA);
 }

现在,在我的onActivityResult我调用一个函数将照片添加到图库中:

private void galleryAddPic() {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    getContext().sendBroadcast(mediaScanIntent);
}

另一个将照片设置为ImageView

private void setPic(ImageView mImageView) {
    BitmapFactory.Options bmOptions = new BitmapFactory.Options();

    // Decode the image file into a Bitmap sized to fill the View
    bmOptions.inJustDecodeBounds = false;
    bmOptions.inPurgeable = true;

    Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
    mImageView.setImageBitmap(bitmap);
}

我正在努力将保存到SD中的图片保存,因为我的方法不起作用(我跟随Android开发人员tutrial)。我认为将额外的内容传递给Intent应该可以解决这个问题,但它无法正常工作。

任何提示?

1 个答案:

答案 0 :(得分:0)

已解决:这是对FileProvider的错过调用

更新了createImageFile()功能:

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = timeStamp;
    File album = getAlbumStorageDir("MiBodaAPP");
    File imageFile = File.createTempFile(imageFileName, ".jpg", album);

    mCurrentPhotoPath = imageFile.getAbsolutePath();

    return imageFile;
}

更新onActivityResult

takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(getContext(), "es.antonio.prueba.fileprovider", photoFile));

在这里,我错误地取值EXTRA_OUTPUT param,因为我从环境中获取路径而不是形成FileProvider。