在Android应用程序之间共享不可变文件

时间:2016-11-28 22:46:23

标签: android file share zipfile bytebuffer

我写过2个应用程序,其数据是从互联网上下载的。

由于这些数据(大约40Mb,在几个zip文件中)是相同的,我想在2个应用程序之间共享它,以便它为用户消耗更少的带宽和更少的存储空间。

目前,我还没有找到一个好的解决方案:

  • 原来,我将数据保存在公共下载目录中。 这是一个简单的解决方案,但它需要读取权限,我想避免这种情况。
  • 然后我认为我可以使用内容提供程序(以及inputStreams和mmaped ByteBuffers)但是,在核心,我的应用程序放了很多zip文件 在一个大的ZipResourceFile中: 读取和复制一些压缩文件 一些未压缩的文件被mmaped并用作lucene数据库

所以,我可以忘记一个简单的FileProvider,因为我需要一个File来获取ZipFile以解压缩我的数据

此外,也许可以构建一个ZipFileProvider,我的文件将放在一个大的ZipResourceFile中,其部分将通过内容提供者提供,就像这个库一样:
https://github.com/jarondl/android-zipfileprovider/blob/master/src/net/jarondl/zipfileprovider/ZipFileProvider.java

但是,如果我通过这样的ZipFileContentProvider得到一些mmaped ByteBuffer,它能够拥有长寿和安全的生命吗? (我应该使用服务吗?) 如果服务它的ZipFileContentProvider的进程死了怎么办? 记忆消耗怎么样?有什么警告? 是不是应该以短命的方式使用ContentProvider?

有更好的解决方案吗?

更新:

知道android无法共享同一个开发者(和其他人)中的几个应用程序的目录。或者有可能吗?

UPDATE2:

我考虑过将文件存储在getExternalFilesDir()上,但是下面的官方警告让我非常紧张(写作怎么样?):

  

注意虽然getExternalFilesDir()和。提供的目录   MediaStore内容无法访问getExternalFilesDirs()   提供者,具有READ_EXTERNAL_STORAGE权限的其他应用程序可以   访问外部存储上的所有文件,包括这些文件。如果你需要   要完全限制对文件的访问,您应该写   您的文件到内部存储。

1 个答案:

答案 0 :(得分:1)

  

Android确实无法共享来自同一开发人员的几个应用程序的目录。或者有可能吗?

你之前说明它可能,但你试图避免它

  

原来,我将数据保存在公共下载目录中。这是一个简单的解决方案,但它需要读取权限,我想避免这种情况。

使用读取权限没有任何问题。或写入该事项的许可。您有什么特别的理由想避免它吗?

在适当的情况下为您的两个应用添加读/写权限,并访问您自己的重用文件夹结构。它不必是公共下载目录。例如<com.MyCompanyNamespace>/Data

然后你可以:

  1. 检查您的文件夹
  2. 否则请检查公用文件夹并移至您的文件夹。
  3. 另外直接到下载站点。
  4. 使用读/写perimssions没有任何问题。你可以在应用程序商店或应用程序中说明为什么需要权限,以减轻他们的想法。

    我知道你有更多的问题,但希望这个简单的答案消除了这个需要。