【发布时间】:2018-07-05 20:08:23
【问题描述】:
我有一个 Android 应用,我在其中使用相机拍照。出于隐私原因,我希望这些照片 100% 保留在我自己的应用程序内部。在某些设备(不是所有设备)上,我的应用程序中拍摄的照片被复制到手机上的相机胶卷中。我想知道我是否还能做些什么来让他们远离相机胶卷。以下是我尝试过的。
在开始尝试之前,我看到this post on SO 建议进入相机胶卷并删除图片。由于多种原因,这不是一个理想的情况:
- 如果我的应用在我有机会删除图像之前发生崩溃或终止,它会保留在那里。
- 即使我及时捕捉并删除它们,它们仍然会在相机胶卷上存在一小段时间,这可能导致其他应用程序访问它们,即使机会很小。
- 一般来说,我不想从用户的相机胶卷中删除内容,因为害怕删除我不应该删除的内容。
- 这似乎是一个非常可怕和骇人听闻的解决方法,而且是 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:
如果您希望照片仅对您的应用保持私密,您可以改用
getExternalFilesDir()提供的目录。
同样的结果,我也不想在这里保存图像。
我还尝试创建一个 tempFile 而不是常规文件来临时存储我的图像,但我得到了相同的结果:
File file = File.createTempFile(filename, ".jpeg", folder);
我还碰巧看到一篇文章说您可以在照片所在的目录中创建一个名为 .nomedia 的文件,这可能会阻止某些文件扫描仪从其中访问照片,但这并没有阻止任何事情。
是否有任何其他选项可以将我的照片 100% 保留在我的应用程序内部,而无需进入相机胶卷并删除文件?
【问题讨论】:
标签: java android android-camera privacy