首页 > 解决方案 > 相机新捕获图像的路径总是返回空

问题描述

我正在构建一个应用程序,其功能之一是拍照并将其上传到服务器。

这是我的做法。我用reqCode = 7

btnUpload.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, reqCode);
    }
});

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Toast.makeText(getActivity(), requestCode + " - " + resultCode, Toast.LENGTH_LONG).show();

    if(requestCode == reqCode && resultCode == RESULT_OK)
    {
        bitmap = (Bitmap) data.getExtras().get("data");
        imageCamera.setImageBitmap(bitmap);

        Uri tempUri = getImageUri(getActivity().getApplicationContext(), bitmap);

        //Toast.makeText(getActivity(),"Here "+ tempUri, Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(getActivity(), "Failed To Capture Image", Toast.LENGTH_LONG).show();
    }
}

private Uri getImageUri(Context applicationContext, Bitmap photo) {
    Bitmap OutImage = Bitmap.createScaledBitmap(photo, 1000, 1000,true);
    String path = MediaStore.Images.Media.insertImage(applicationContext.getContentResolver(), OutImage, "Title", null);
    return Uri.parse(path);
}

奇怪的是,getImageUri 中的字符串路径总是返回空。获取相机最近捕获的图片的图像路径的正确方法是什么?什么是正确的请求代码?

标签: androidandroid-camera

解决方案


File file;
Uri fileUri;

    final int RC_TAKE_PHOTO = 1;

        private void takePhoto() {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            file = new File(getActivity().getExternalCacheDir(), 
                    String.valueOf(System.currentTimeMillis()) + ".jpg");
            fileUri = Uri.fromFile(file);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
            getActivity().startActivityForResult(intent, RC_TAKE_PHOTO);

        }


        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == RC_TAKE_PHOTO && resultCode == RESULT_OK) {

                    //do whatever you need with taken photo using file or fileUri

                    galleryUpdatePic(tmpFileUri.getPath());

                        Glide.with(mContext)
                    .load(tmpFileUri.getPath())
                    .into(img_profile_user);

                }
            }
        }




    private void galleryUpdatePic(String mediaUrl) {
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        File f = new File(mediaUrl);
        Uri contentUri = Uri.fromFile(f);
        mediaScanIntent.setData(contentUri);
        this.sendBroadcast(mediaScanIntent);
    }

推荐阅读