从相机拍摄的图像不会上传到firebase存储空间

时间:2017-10-03 12:40:14

标签: android firebase firebase-storage

我有一个按钮,向用户显示他是否想要来自图库或相机的图像。当用户从图库中获取图像时,我能够将图像成功上传到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存储。请帮忙

1 个答案:

答案 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();