一开始不传ImageUri,但使用得不到bitmap,结果为null
public void takePhotoFromCamera(View v) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//imageView = findViewById(R.id.imageview);
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == this.RESULT_CANCELED) {
return;
}
if (requestCode == GALLERY) {
if (data != null) {
Uri contentURI = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentURI);
//path = saveImage(bitmap);
//ExifInterface exif = new ExifInterface(path);
//int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
//rotateImage(bitmap);
imgLoaded=true;
imgToProcess = bitmap;
imgProcessed = bitmap;
displayImage(bitmap);
imgURI = contentURI;
//imageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, R.string.toast_process_failed, Toast.LENGTH_SHORT).show();
}
}
}
// CAMERA FUNCTIONALITY NOT IMPLEMENTED YET
else if (requestCode == CAMERA) {
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
Bitmap bmp = data.getParcelableExtra("data");
int angle = 90;
Matrix matrix = new Matrix();
// imageView.setScaleType(ImageView.ScaleType.MATRIX); //required
matrix.setRotate((float) angle);
// imageView.setImageMatrix(matrix);
imgToProcess = Bitmap.createBitmap(thumbnail,0,0,thumbnail.getWidth(),thumbnail.getHeight(),matrix,true);
//imageView.setImageBitmap(thumbnail);
saveImage(thumbnail);
displayImage(imgToProcess);
Toast.makeText(MainActivity.this, "Image Saved!", Toast.LENGTH_SHORT).show();
}
}
后来使用传imageURI的方式,将URI放入intent中,可以得到bitmap,
MediaStore.ACTION_IMAGE_CAPTURE注意事项 - 灰信网(软件开发博客聚合)
中间遇到了FileProvider的问题
public void method1(View v) {
File image = new File(getExternalCacheDir(), "outImage,jpg");
if (!image.exists()) {
try {
image.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mImageUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", image);
} else {
mImageUri = Uri.fromFile(image);
}
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(intent, CAMERAA);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERAA) {
try {
Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(mImageUri));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
参考博客
解决exposed beyond app through ClipData.Item.getUri() 错误_渣渣辉131419的博客-CSDN博客
AVATAR-Master-v3.0