1

我有一个简单的应用程序应该处理(显示、播放...)用户下载的数据。即当用户下载应用程序(免费)时,它是空的,或者只填充了一些示例数据,但随后用户可以下载他们偏好的实际内容(并可能通过 Android 计费系统付费)。每个项目都是一个文件夹,其中包含一个 xml 文件以及几个子文件夹(例如音频和图像)。在开发阶段,数据存储在资产目录中。

在这一点上,付款本身不是问题的主题。我实际上对以下内容感兴趣:

  • 我在哪里可以将下载的数据存储在手机中,以便应用程序可以访问它,但不能由用户手动复制(例如复制到另一部手机)。如果我可以将下载的数据存储在资产目录中,那将是理想的,但我担心一旦生成了 apk 文件,资产就会“锁定”并且无法轻松扩展(或者它们可以吗?)如果我将它们存储在手机上卡(或内置内存),它们也可以被媒体播放器或画廊等其他应用程序访问,不是吗?
  • 如果我可以将包下载为单个文件,那就太好了 - 是否可以通过内置方法对其进行打包并将其存储为包含已打包(因此可读)子文件夹和文件的文件夹?
  • 下载应用程序时,它是一个 apk 文件。因此,应该可以将样本数据(即随应用程序下载)与稍后将下载的数据放在同一位置。我怎样才能确保这一点。
  • 数据可能非常大,因此不能在下载后立即将它们全部包含在资产文件夹中并根据用户的操作解锁它
  • 下载数据后,它们必须离线工作(即用户必须能够在没有互联网访问的情况下显示它们;因此无法在服务器上检查用户的身份 - 他们可以简单地显示他们之前下载的任何内容)

示例(用于说明目的):有一个能够显示食谱的应用程序。它在安装后不包含任何内容或仅包含一些内容。您应该能够从服务器(每个都具有存储在单独目录中的特定文件结构)下载食谱(一个接一个)。下载后,它们将成为应用程序不可或缺的一部分,并且即使使用手机的飞行模式,用户也始终可以访问。

希望它至少有一些意义(如果没有,我可以进一步澄清这个问题)。我找到了几个关于如何处理存储在资产中的数据以及如何处理 sd 卡上的数据的教程,但没有关于这个特定主题的教程。

4

1 回答 1

2
  1. 您可以将日期存储在您的应用程序数据文件夹中,基本上它仅适用于您的应用程序。如果您想防止您的数据被复制到另一部手机,请在第一次运行时生成一个随机 UUID,然后使用它来加密您存储在数据文件夹中的数据。另一部手机将有不同的 UUID 和不同的加密密钥,这使得试图复制加密数据毫无意义。您甚至可以使用非对称加密并将您生成的(公共)密钥发送到服务器,并让服务器对您的数据进行编码并以加密形式发回,从而完全防止您的数据暴露。

  2. assets/文件夹通常是只读的,您只能在构建步骤中将数据放在那里。

  3. 使您的文件成为 .zip 文件——这些文件很紧凑,您可以轻松读取文件和文件夹以及您需要使用的任何内容java.util.zip.ZipFile

  4. 示例数据进入assets文件夹,您可以在第一次运行时将其复制到数据文件夹中。

  5. 下载数据并将其保存到设备后,我看不出您的应用程序无法脱机运行的任何原因

于 2012-11-13T11:03:07.937 回答