【问题标题】:Get File object onActivityResult when select Image选择图像时获取文件对象onActivityResult
【发布时间】:2017-10-10 02:10:23
【问题描述】:

我能够从 android 中的图像中获取 Bitmap,但是当我尝试获取 File 对象时遇到了麻烦。我的问题是当onActivityResult 返回时我怎样才能获得File 对象。

这是我的代码:

打开图片选择:

private void setUpAddMorePicturesClick() {
    Button btnAddPictures = (Button)findViewById(R.id.btn_add_pictures);
    btnAddPictures.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);//
            startActivityForResult(Intent.createChooser(intent, getString(R.string.text_select_picture)),
                                        ConstantValues.REQUEST_CODE_SELECT_IMAGE);
        }
    });
}

OnActivityResult 方法:

public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == ConstantValues.REQUEST_CODE_SELECT_IMAGE)
        {
            if (resultCode == Activity.RESULT_OK)
            {
                if (data != null)
                {

                //Uri uri = data.getData();
                //String uriString = uri.toString();
                //File imgFile = new File(uriString);

                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA };

                Cursor cursor = getContentResolver().query(selectedImage,
                        filePathColumn, null, null, null);
                cursor.moveToFirst();

                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                String picturePath = cursor.getString(columnIndex);
                cursor.close();


                File imgFile = new File(picturePath); // <-- NOT WORKING

               // File imgFile = Environment.getExternalStoragePublicDirectory(data.getData().getPath());



                //Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
                //byte[] s = Utils.bitmapToByteArray(bitmap);

                Snackbar snackbarError = Snackbar.make(rootRelativeLayout, R.string.msg_error_wcf_call_default, Snackbar.LENGTH_LONG);
                //new EscortBusiness(this).addImage(s, snackbarError);
                new EscortBusiness(this).addImageMultiPart(imgFile, snackbarError);

            }
        } else if (resultCode == Activity.RESULT_CANCELED)
        {
            Toast.makeText(this, "Cancelled", Toast.LENGTH_SHORT).show();
        }
    }
}

【问题讨论】:

  • 不要尝试获取 File 对象。你不需要它。直接使用 uri。
  • @greenapps 其实我需要它,我必须上传选择的图片,改造方法使用一个文件对象作为参数。
  • // &lt;-- NOT WORKING。错误的描述。你得到了哪条路?会发生什么?
  • 嗨,我也想做你想做的事。我得到了图像数据,但我想将它提供给“文件”对象以上传到服务器。你设法解决了这个问题吗?

标签: java android media-queries media


【解决方案1】:

使用来自 URI 的输入流,因为它的架构可能是 file:// 或 content://

BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData()));

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 2020-04-15
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2019-12-31
    • 1970-01-01
    相关资源
    最近更新 更多