0

在他们有可以购买的代码之后,我正在构建用于从我的服务器下载某些内容(食谱)的应用程序。到目前为止,我在我的应用程序中做了这个:

  • 用户将受密码保护的压缩文件下载到 SD 卡,因此只有应用程序才能在代码中使用密码提取它
  • 按下按钮事件的用户使用用代码编写的密码解压缩文件并将配方文本保存到数据库

当我想提取图像时出现问题。提取不是问题,但是一旦我将它们提取到SD卡,用户就可以访问并拥有这些图片是一个问题。有没有一种方法可以以某种方式将图像保存在 SD 卡上,这样用户就无法访问它们并受到保护,因此用户无法删除它们(所以我不需要经常检查应用程序,应用程序有所有要显示的图像) - 我不知道这怎么可能,因为理论上在这种情况下应用程序可以填满整个 SD 卡并且不允许用户删除这些图片(也许图片可以以某种方式连接到应用程序安装?)。使用配方的文本表示没有问题,因为它直接进入数据库,但我不想将 blob 保存到数据库。

所以,我希望你能理解我的问题。你能告诉我如何解决它,如果我走错了路?

4

2 回答 2

2

有没有办法可以以某种方式将图像保存在 SD 卡上,这样用户就无法访问它们

不。

并受到保护,因此用户无法删除它们

不。

你能告诉我如何解决它,如果我走错了路?

将图像保存在内部存储而不是外部存储上。

于 2013-09-12T14:53:20.170 回答
1

您可以使用Context.getExternalFilesDir()[1] 并将图像文件放在那里。请注意,您的要求无法满足。关于该getExternalFilesDir方法的一些观察和建议:

有没有办法可以将图像以某种方式保存在 SD 卡上,这样用户就无法访问它们并受到保护,因此用户无法删除它们

无论是在 Android 上还是用户将 SD 卡放入 PC 上的 SD 读卡器中,SD 卡上的任何内容都可以访问和删除。如果您想保护您的图像免遭盗窃,为什么要在设备上解密它们?您可以在应用程序中对所有图像进行加密和解密,例如使用 ContentProvider。

所以我不需要经常检查应用程序应用程序有所有图像要显示

但无论如何你应该!正如我所说,用户始终可以从 SD 中删除文件,甚至可以从内部存储器上的应用程序文件夹中删除文件(例如,通过在 Settings->Apps 中按 Clear Data)。如果您希望该过程尽可能快速和简单,您可以将所有图像数据放在一个大的 blob 文件中(可选加密),然后检查它是否存在,是否具有正确的大小(以及可选是否是最新的) .

理论上在这种情况下应用程序可以填满整个 SD 卡并且不允许用户删除这些图片(也许图片可以以某种方式连接到应用程序安装?

是的!通过使用Context.getExternalFilesDir您放在该文件夹中的任何内容,都将被视为应用程序数据,并且可以由用户清除。卸载应用程序时它甚至会被清除,这很好,因为您不想在用户的 SD 上留下兆字节和兆字节的不需要的文件。

[1] http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String)

于 2013-09-12T15:31:22.240 回答