我想将ImageView
的可绘制来源设置为用户拍摄的照片,但它不起作用。
当用户拍照时,这是我的onActivityResult
:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
Intent intent = new Intent(this, MyNewActivity.class);
intent.putExtra("URI", imageUri.toString());
startActivity(intent);
}
}
这是Activity
我要设置ImageView
资源的部分:
if (getIntent().getStringExtra("URI") != null) {
File imgFile = new File(getIntent().getStringExtra("URI"));
if(imgFile.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
contactImage.setImageBitmap(myBitmap);
}
}
当我尝试这个时,我有一个这样的路径:“ file /// storage / emulated / O / fname_xxxx.jpg ”但它不起作用。
我尝试使用图片选择器并且它可以工作(使用“/ storage / emulated /...”这样的路径)!我真的不知道为什么......
答案 0 :(得分:2)
File imgFile = new File(getIntent().getStringExtra("URI"));
转换为
File imgFile = new File("file:///storage/emulated/O/fname_xxxx.jpg");
但它应转换为
File imgFile = new File("/storage/emulated/O/fname_xxxx.jpg");
请在使用前删除"file://"
。
答案 1 :(得分:0)
这对我有用
if (getIntent().getStringExtra("URI") != null) {
Uri myUri = Uri.parse(extras.getString("URI"));
Picasso.with(RegisterActivity.this)
.load(selectedImage)
.into(contactImage);
}
答案 2 :(得分:0)
尝试以下代码拍摄相机和相机拍摄的Pic。也可以选择画廊
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == this.RESULT_OK) {
if (requestCode == SELECT_FILE)
onSelectFromGalleryResult(data);
else if (requestCode == REQUEST_CAMERA)
onCaptureImageResult(data);
}
}
private void onCaptureImageResult(Intent data) {
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
File destination = new File(Environment.getExternalStorageDirectory(),
System.currentTimeMillis() + ".jpg");
FileOutputStream fo;
try {
destination.createNewFile();
fo = new FileOutputStream(destination);
fo.write(bytes.toByteArray());
fo.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
profileIV.setImageBitmap(thumbnail);
// CALL THIS METHOD TO GET THE URI FROM THE BITMAP
Uri tempUri = getImageUri(getApplicationContext(), thumbnail);
// CALL THIS METHOD TO GET THE ACTUAL PATH
file = new File(getRealPathFromURI(tempUri));
}
@SuppressWarnings("deprecation")
private void onSelectFromGalleryResult(Intent data) {
Bitmap bm=null;
if (data != null) {
try {
bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
// CALL THIS METHOD TO GET THE URI FROM THE BITMAP
Uri tempUri = getImageUri(getApplicationContext(), bm);
// CALL THIS METHOD TO GET THE ACTUAL PATH
file = new File(getRealPathFromURI(tempUri));
} catch (IOException e) {
e.printStackTrace();
}
}
profileIV.setImageBitmap(bm);
}
public String getRealPathFromURI(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
答案 3 :(得分:0)
点击图片
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra("URI",Intent.URI_INTENT_SCHEME);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
将onActivityResult()方法替换为以下代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("URI");
imageView.setImageBitmap(photo);
}
}
答案 4 :(得分:0)
我认为你是意图捆绑错误的URI数据尝试下面的代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
Intent intent = new Intent(this, MyNewActivity.class);
intent.putExtra("URI", data.getData().toString());
startActivity(intent);
}
}
这可能会有所帮助
答案 5 :(得分:0)
我发现解决方案将“file://”替换为“”:
if (getIntent().getStringExtra("URI") != null) {
File imgFile = new File(getIntent().getStringExtra("URI").replace("file://", ""));
if(imgFile.exists()){
Picasso.with(this).load(imgFile).into(myImageView);
}
}
所以我得到了:
{{1}}