DownloadManager文件的安全性

时间:2012-10-30 13:25:40

标签: android android-contentprovider

应用1: 我下载了DownloadManager

的文件

应用2: 我问DownloadManager所有下载。我只获得了自己发起的,而不是来自App 1的那个。

下载的文件包含Uricontent://downloads/my_downloads/id

来自“应用2”:我无法使用此ImageUri设置ImageView的{​​{1}}。 (我得到Content Uri

现在我的问题是: 如果我打开FileNotFoundException并点击从Android Downloads App下载的图片。我可以使用我系统上的任何图片查看器查看它。为什么不使用App 1

这是因为使用了App 2Intent)吗?或者我错过了什么?

修改

显然,您可以使用任何其他应用中的Action_VIEW来获取该文件。 有没有办法限制应用程序访问此文件?那么只有发起下载的应用才能打开它?

我正在使用:

content://downloads/all_downloads/<some_id>

1 个答案:

答案 0 :(得分:0)

下载内容与查看内容不同。因此,应用程序A启动文件X的下载并不意味着应用程序A能够查看它。如果您希望使用应用程序显示它,则应添加<intent-filter>,以便应用程序A可以显示在适用的查看者列表中。如果您希望自己的应用成为明确的观看者,则必须使用一些技巧,例如使用唯一的文件扩展名(并在<intent-filter>中匹配该扩展程序。

修改

如果查看DownloadManager源,则会注意到对下载相关字段的访问仅限于所有者。因此,应用程序A只能看到它自己启动的这些下载,而对应用程序B没有任何其他和相同的内容(最终,一旦下载到SDCard目的地,这些文件是“世界可读的”)是无关紧要的。这也解释了为什么应用程序B无法通过使用内容提供程序来尝试访问应用程序A的下载 - 根本没有您尝试引用的下载由应用程序B拥有(这些是应用程序B)。最后,如果你想“共享”下载,你必须以下载方式将下载相关数据传递给应用程序B,而不是使用DownloadManager(即用所有数据填充Bundle并将其传递给B)。