我正在从我的Nougat设备中捕获图像,并且我将图像存储在ABC文件夹中,工作正常。捕获图像后,我将它们发送到服务器,一旦上传,我将删除ABC文件夹中的图像,直到这里工作正常,但我注意到相机正在创建两个图像,一个存储在ABC文件夹中,另一个存储在DCIM /相机中夹。另外我在保存时指定捕获图像的名称,但是DCIM / Camera中的一个具有系统生成的名称,请指导如何从DCIM / Camera文件夹中删除该图像这是我的代码
打开相机
private void openCamera() {
destination = null;
PackageManager pm = getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
try {
String originalfileName = getFilenameOrgImage();
File root = new File(ConstantData.IMAGE_STORAGE_LOCAL_PATH + File.separator);
if (!root.exists()) {
root.mkdirs();
}
destination = new File(originalfileName);
Log.d("destination",destination.getAbsolutePath());
Uri photoURI = FileProvider.
getUriForFile(this, getPackageName() + ".provider", destination);
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
} catch (Exception e) {
e.printStackTrace();
CommonMethods.showToast(this, getResources().getString(R.string.please_try_again));
}
} else {
CommonMethods.showToast(this, getResources().getString(R.string.camera_doesnt_support));
}
}
onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == REQUEST_IMAGE_CAPTURE) {
FileInputStream in = new FileInputStream(destination);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 10;
Log.d("IMAGE",destination.getAbsolutePath());
treeDetailsModels.get(imgClickPos).setName(imagename);
treeDetailsModels.get(imgClickPos).setImgDestinationPath(destination);
View v = viewPager.findViewWithTag("pos" + imgClickPos);
ImageView ivBackground = (ImageView) v.findViewById(R.id.ivPhoto);
Bitmap bmp = BitmapFactory.decodeStream(in, null, options);
ivBackground.setImageBitmap(bmp);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
自定义位置
public static final String IMAGE_STORAGE_LOCAL_PATH = Environment.getExternalStorageDirectory().getPath().toString() + "/ABC";
将此提供添加到清单
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
路径
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="ABC/"/>
</paths>
答案 0 :(得分:2)
但我注意到相机正在创建两个存储在ABC文件夹中的图像,另一个存储在DCIM / Camera文件夹中
您的代码正在启动第三方相机应用。该应用程序是由其他程序员编写的,那些程序员可以做任何他们想做的事情。他们不应将图像保存两次,但欢迎他们这样做。
请指导如何从DCIM /相机文件夹中删除该图像
有大约20亿台Android设备,数百种不同的预装摄像头应用程序以及Play商店和其他地方提供的数百种相机应用程序。您的代码可以启动数百个相机应用程序中的任何一个。任何这些相机应用程序都可以随心所欲。有些人可能会创建额外的照片副本。有些人可能会将照片上传到他们的服务器有些人可能会修改照片。希望大多数人不会做这些事情......但是你没有得到投票。
所以,你的选择是:
使用某些相机应用的副作用,例如图像的额外副本,或
停止使用ACTION_IMAGE_CAPTURE
拍摄照片(使用相机硬件拍摄照片,或者完全停止拍照)