两个图像由相机捕获,无法从DCIM /相机文件夹中删除一个

时间:2017-04-21 06:46:12

标签: android android-camera android-camera-intent android-7.1-nougat

我正在从我的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>

1 个答案:

答案 0 :(得分:2)

  

但我注意到相机正在创建两个存储在ABC文件夹中的图像,另一个存储在DCIM / Camera文件夹中

您的代码正在启动第三方相机应用。该应用程序是由其他程序员编写的,那些程序员可以做任何他们想做的事情。他们不应将图像保存两次,但欢迎他们这样做。

  

请指导如何从DCIM /相机文件夹中删除该图像

有大约20亿台Android设备,数百种不同的预装摄像头应用程序以及Play商店和其他地方提供的数百种相机应用程序。您的代码可以启动数百个相机应用程序中的任何一个。任何这些相机应用程序都可以随心所欲。有些人可能会创建额外的照片副本。有些人可能会将照片上传到他们的服务器有些人可能会修改照片。希望大多数人不会做这些事情......但是你没有得到投票。

所以,你的选择是:

  1. 使用某些相机应用的副作用,例如图像的额外副本,或

  2. 停止使用ACTION_IMAGE_CAPTURE拍摄照片(使用相机硬件拍摄照片,或者完全停止拍照)