我正在尝试以下方法:
1. Click a button to take a photo.
2. Save photo.
3. Add photo into the gallery.
4. Show photo into an ImageView.
1
和4
工作正常,但我遇到了2
和3
的问题。
这是我的代码:
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应该可以解决这个问题,但它无法正常工作。
任何提示?
答案 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。