内部App相机照片未正确保存到图库

Stonz2

我有一个Android应用程序,并且正在其中使用相机拍照。出于隐私原因,我希望这些照片100%保留在我自己的应用程序内部。在某些设备(不是全部)上,我在应用程序中拍摄的照片被复制到手机的相机胶卷中。我想知道是否还有其他方法可以使它们脱离相机胶卷。以下是我尝试过的。

在开始尝试之前,我已经看过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()上面的内容保存到外部存储目录而不是内部存储,因为根据Android docs

如果您希望照片仅对应用程序保密,则可以改用提供的目录getExternalFilesDir()

结果相同,我也不想在这里保存图像。

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

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

我也碰巧在一篇文章中说,您可以.nomedia在照片所在的目录中创建一个名为的文件,这可以阻止某些文件扫描仪从其中访问照片,但是并不能阻止任何事情。

还有其他选择可以将照片100%保留在我的应用程序内部,而不必进入相机胶卷并删除文件吗?

常用软件

出于隐私原因,我希望这些照片保留在我自己的应用程序内部100%

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

相反,您可以直接使用相机API或使用包装它们的库在自己的应用中自己拍照

在某些设备(不是全部)上,我在应用程序中拍摄的照片被复制到手机的相机胶卷中

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章