我正在创建一个应用程序,用于在特定过程后拍照并从图库中删除图像。这是我的代码
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
startActivityForResult(takePictureIntent, requestCode);
}
我像这样处理结果
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
image1 = (Bitmap) extras.get(IMAGE_BUNDLE_NAME);
imageView1.setImageBitmap(image1);
imageUri1 = data.getData();
}
}
问题是data.getData();
在某些设备中返回null
。我试图用这段代码替换URI
imageUri1 = getImageUri(getActivity(), image1);
而这种方法
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
如果我使用此Uri
我无法从设备中删除文件。这就是我删除图像的方式
private void deleteFileFromMediaStore(final ContentResolver contentResolver, int requestCode) {
String canonicalPath;
File fdelete = new File(imageUri1.getPath());
if(fdelete != null){
try {
canonicalPath = fdelete.getCanonicalPath();
} catch (IOException e) {
canonicalPath = fdelete.getAbsolutePath();
}
final Uri uri = MediaStore.Files.getContentUri(Constants.EXTERNAL_STORAGE_CONSTANT);
final int result = contentResolver.delete(uri,
MediaStore.Files.FileColumns.DATA + "=?", new String[] {canonicalPath});
if (result == 0) {
final String absolutePath = fdelete.getAbsolutePath();
if (!absolutePath.equals(canonicalPath)) {
contentResolver.delete(uri,
MediaStore.Files.FileColumns.DATA + "=?", new String[]{absolutePath});
}
}
}
}
如何删除照片或如何在所有设备上data.getData()
设为非空?
问题是data.getData(;在某些设备中返回null
它将返回大多数相机应用程序的null
,因为它应该返回 null
.
如何删除照片
将缩略图照片保存到文件(compress()
和FileOutputStream
(。
或者,使用 EXTRA_OUTPUT
请求相机应用将全尺寸照片保存到您指定的位置(例如,使用 FileProvider
提供的Uri
(。
或者,使用像Fotoapparat这样的库直接在你的应用中拍摄照片,而不是依赖数百个相机应用中的一个。
如何在所有设备上使"data.getData(("不为空?
你不能。