当我将其放在应用程序中时,如何阻止相机保存图像中的副本

时间:2018-10-07 22:13:29

标签: android camera

我制作了一个应用程序,用于拍摄照片并将其保存在SD卡中,扩展名为(.x)。 一切正常,但是每次拍摄图像时,图像都会保存在两个位置:目录和相机目录。

我的问题:如何停止将其保存在图库中?

      Uri mHighQualityImageUri = generateTimeStampPhotoFileUri();
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mHighQualityImageUri);
        startActivityForResult(intent, 20);


     private Uri generateTimeStampPhotoFileUri() {

        Uri photoFileUri = null;
        File outputDir = getPhotoDirectory();
        if (outputDir != null) {
            Time t = new Time();
            t.setToNow();
            File photoFile = new File(outputDir, System.currentTimeMillis()
                    + ".x");
            photoFileUri = Uri.fromFile(photoFile);
        }
        return photoFileUri;
    }



     private File getPhotoDirectory() {
        File outputDir = null;
        String externalStorageStagte = Environment.getExternalStorageState();
        if (externalStorageStagte.equals(Environment.MEDIA_MOUNTED)) {

            File photoDir=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Android/data/mariam.billing/files");
            outputDir = new File("/sdcard/Billing/");
            if (!outputDir.exists())
                if (!outputDir.mkdirs()) {
                    Toast.makeText(
                            this,
                            "Failed to create directory "
                                    + outputDir.getAbsolutePath(),
                            Toast.LENGTH_SHORT).show();
                    outputDir = null;
                }
        }
        return outputDir;
    }

int x=0;
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (this.requestCode == requestCode && resultCode == RESULT_OK) {
            imageHolder.setImageURI(mHighQualityImageUri);
            x=1;
        }
    }

2 个答案:

答案 0 :(得分:2)

这不是你的错。您的代码看起来正确,并且设备上的照相机应用程序确实尊重了您的EXTRA_OUTPUT请求。

但是此应用选择将照片的副本保存到其他位置。尝试从Play商店安装Google Camera app。我相信,如果您使用它来实现ACTION_IMAGE_CAPTURE的意图,则只会获得一张图像的副本。

尝试从Play商店购买其他一些应用,尤其是Open Camera app。在这里,您可以下载源代码并了解启动意图时它的实际作用。

有成千上万种摄像头应用程序,它们内置于不同的设备中,可以下载。他们的行为和行为有所不同。如果您需要更一致的行为,则可以使用Android相机API或使此类集成更加容易的库之一,从应用中拍摄照片。

更新,有一个直播的bug report可以追溯到2011年8月,哇!

答案 1 :(得分:0)

获得重复图像的原因是因为您同时使用两个摄像头应用程序(即:默认摄像头和正在创建的摄像头)。您正在调用内置摄像机的意图,因此,默认摄像机将在应用程序执行相同操作时保存其自己的副本。您可以避免创建自定义相机,例如Facebook,Instagram等。但是,您可以创造性地编写代码,也就是说,如果您打算创建图像上传应用程序。您可以使相机拍照,然后在上载或事件结束后,您的应用程序将删除所拍摄的图像。或者更好的方法是将图像存储在隐藏的文件夹中。您可以通过在文件夹名称之前添加点(。)来隐藏存储文件夹,然后在事件结束时,应用程序再次删除该隐藏文件夹。但是,这并不是一个好习惯。