我可以从android中的图像中获取Bitmap
,但是当我尝试获取File
对象时,我遇到了麻烦。我的问题是如何在File
返回时获得onActivityResult
对象。
这是我的代码:
要打开图片选择:
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();
}
}
}
答案 0 :(得分:0)
使用来自URI的输入流,因为其架构可能是file://或content://
BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData()));