内部应用程序相机照片不正确地保存到图库

Internal App Camera Photos Improperly Saved to Gallery

我有一个 Android 应用程序,我在其中使用相机拍照。出于隐私原因,我希望这些照片 100% 保留在我自己的应用程序内部。在某些设备(不是所有设备)上,我的应用程序中拍摄的照片被复制到 phone 上的相机胶卷中。我想知道我是否还能做些什么来让他们远离相机胶卷。以下是我的尝试。

在开始尝试之前,我看到 this post on SO 建议进入相机胶卷并删除照片。由于多种原因,这不是一个理想的情况:

  1. 如果我的应用程序在我有机会删除图像之前发生崩溃或终止,它将保留在那里。
  2. 即使我及时捕捉并删除它们,它们仍会在相机胶卷上存在一小段时间,这可能会导致其他应用程序访问它们,即使机会很小。
  3. 一般情况下,我不想从用户的相机胶卷中删除内容,因为害怕删除不该删除的内容。
  4. 这似乎是一个极其可怕和骇人听闻的解决方法,它是 7 年前的事了,所以我希望现在有更好的东西可用。

我正在将我的照片直接保存到我的应用程序的内部存储中。

File folder = new File(activity.getFilesDir(), "pictures");
folder.mkdirs();
File file = new File(folder.getAbsolutePath() + File.separator + filename + ".jpeg");
URI uri = FileProvider.getUriForFile(activity, myAppsFileProviderAuthority(), file);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
activity.startActivityForResult(intent, INTENT_RESULT_VALUE);

据我所知,仅此一项就应该可以防止其他任何东西访问我的照片,但它们仍会显示在某些设备的图库中。

我还尝试使用 getExternalFilesDir() 而不是上面的 activity.getFilesDir() 保存到外部存储目录而不是内部存储,因为 according to the Android docs:

if you'd like the photos to remain private to your app only, you can instead use the directory provided by getExternalFilesDir().

同样的结果,反正我不想在这里保存图像。

我也尝试创建一个临时文件而不是常规文件来临时存储我的图像,但我得到了相同的结果:

File file = File.createTempFile(filename, ".jpeg", folder);

我还偶然看到一篇文章说您可以在照片所在的目录中创建一个名为 .nomedia 的文件,这可以防止某些文件扫描仪从其中访问照片,但事实并非如此停止一切。

是否有任何其他选项可以将我的照片 100% 保留在我的应用程序内部,而无需进入相机胶卷并删除文件?

I want these photos to stay 100% internal to my own app for privacy reasons

那么你不应该使用 ACTION_IMAGE_CAPTURE。根据定义,这会将拍照委托给任意应用程序,这是基于设备和用户的数百种可能的应用程序之一。

相反,您可以在自己的应用中自己拍照,直接使用相机 API 或使用 a library that wraps them

On certain devices (not all of them) the photos taken within my app are being copied into the camera roll on the phone

一些相机应用程序会将照片保存在他们想要的地方,可能除了将照片复制到您的 EXTRA_OUTPUT 位置之外。这取决于那些相机应用程序的开发者,而不是你。可以说,这种行为是一个错误,但您没有实际的方法让任何相机应用程序开发人员修复该错误,更不用说所有有问题的相机应用程序的开发人员了。