我有一个按钮,向用户显示他是否想要来自图库或相机的图像。当用户从图库中获取图像时,我能够将图像成功上传到firebase存储,但是当用户选择相机时,我无法将图像上传到存储。 当用户选择摄像机时,这是我的onActivityResult代码
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
selectedImageUri =Uri.parse(data.getExtras().get("data").toString()) ;
Bitmap photo = (Bitmap) data.getExtras().get("data");
cameraImageButton.setImageBitmap(photo);
}
它将图片上传到我的imageview,但是错误地说
No content provider: android.graphics.Bitmap@1b9dbf5f
java.io.FileNotFoundException: No content provider: android.graphics.Bitmap@1b9dbf5f
当我尝试上传到存储空间时
我经历过similar question posted on stack overflow。
我认为接受的答案是错误的,因为如果我使用
mImageUri = data.getData();
mSelectImage.setImageURI(mImageUri);
以上代码仅适用于从图库中拍摄图像的情况。如果我使用上面的代码并拍摄相机图像,则图像永远不会上传到我的imageview,因此我无法将其推送到firebase存储。请帮忙
答案 0 :(得分:0)
单击相机按钮时,请使用以下代码:
int version = Build.VERSION.SDK_INT;
String imgFileName = "image_name".jpg";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
String pictureImagePath = storageDir.getAbsolutePath() + "/" + imgFileName;
File file = new File(pictureImagePath);
Uri outputFileUri;
if(version < 24){
outputFileUri = Uri.fromFile(file);
} else {
outputFileUri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider",
file);
}
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, 111);
在onActivityResult方法中,使用以下代码:
String imgFileName = "image_name".jpg";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
String pictureImagePath = storageDir.getAbsolutePath() + "/" + imgFileName;
File imgFile = new File(pictureImagePath);
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
byte[] dataArray = bytes.toByteArray();