Android 当我在应用程序中拍摄照片时,如何阻止相机保存照片副本

Android 当我在应用程序中拍摄照片时,如何阻止相机保存照片副本,android,camera,Android,Camera,我制作了一个应用程序,可以拍摄照片并保存在SD卡中,扩展名为(.x)。 一切正常,但每次我拍摄图像时,它都会保存在两个地方:我的目录和相机目录 我的问题:如何阻止它保存在gallery中 Uri mHighQualityImageUri = generateTimeStampPhotoFileUri(); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE); intent

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

我的问题:如何阻止它保存在gallery中

      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;
        }
    }

这不是你的错。您的代码看起来正确,并且设备上的摄像头应用程序确实尊重您的额外输出请求

但该应用程序选择将照片的副本保存到其他地方。尝试从Play Store安装。我相信,如果你用它来实现你的行动、图像和捕获意图,你将只得到一份图像

尝试Play Store中的其他应用程序,尤其是。在那里,您可以下载源代码并了解它在启动intent时的实际功能

有数以千计的摄像头应用程序,内置在不同的设备上,可供下载。他们的行为和举止不同。如果你需要更一致的行为,你可以从你的应用程序中拍摄照片,利用Android camera API或使这种集成更容易的库之一


更新正好有一个可追溯到2011年8月的现场直播,哇

获取重复图像的原因是,您同时使用两个摄影机应用程序(即:默认摄影机和正在创建的摄影机)。您正在调用内置相机的意图,因此,默认相机将保存自己的副本,而您的应用程序也会这样做。你可以避免创建像Facebook、Instagram等的定制相机,但你可以创造性地编写代码,如果你想做一个图像上传应用程序的话。您可以让您的相机拍照,在上传或事件结束后,您的应用程序将删除拍摄的图像。或者最好将图像存储在一个隐藏的文件夹中。您可以通过在文件夹名称前包含一个点(.)来隐藏存储文件夹,并且在事件结束时,应用程序再次删除该隐藏文件夹。但同样,这不是一个好的做法。

“但每次我拍摄一张照片,它都会保存两个位置,即我的目录和图库”——图库不是一个地方。这是一个应用程序。如果您要求相机应用程序将照片保存在公共场所,则该照片可能会被
MediaStore
索引并显示在gallery应用程序中。使用
FileProvider
,您可以要求相机应用程序将照片保存到。显示使用
FileProvider
拍摄照片的基本知识。对不起,我的相机目录。我只想将图像保存在我的目录中