2016-11-28 100 views
0

我寫了2個應用程序,其數據從互聯網下載。由於此數據(大約40Mb,在幾個zip文件中)是相同的,因此我希望在2個應用程序之間共享它,以便爲用戶消耗更少的帶寬和更少的存儲空間。在Android應用程序之間共享不可變文件

目前,我還沒有找到一個很好的解決方案:

  • 的淵源,我在公衆下載目錄中保存的數據。 這是一個簡單的解決方案,但它需要讀取權限,我想避免這種情況。
  • 後來我想,我可以使用內容提供商(和inputStreams和mmaped字節緩衝區),但爲核心,我的應用使許多zip文件 在一個大ZipResourceFile其中: 一些壓縮文件的讀取和複製 一些非壓縮文件被mmaped和

所以作爲Lucene的數據庫,我可以約一個簡單的FileProvider忘記,因爲我需要一個文件得到的ZipFile以解壓縮我的數據

此外,它可能會建立一個ZipFileProvider,在那裏我的文件將被放在一個大的ZipResourceFile中,其部分將被服務唉內容提供商,像這樣的庫做:
https://github.com/jarondl/android-zipfileprovider/blob/master/src/net/jarondl/zipfileprovider/ZipFileProvider.java

但是,如果我得到一些通過這樣的ZipFileContentProvider mmaped字節緩衝區,這將是能夠有一個長期和安全的生活嗎? (我應該使用服務?) 如果服務它的ZipFileContentProvider進程死了怎麼辦? 記憶體消耗情況如何?什麼是警告? ContentProvider是不是應該以短命的方式使用?

有沒有更好的解決方案?

UPDATE:

真的很討厭那個機器人不能共享目錄從同一developper(和其他沒有人)一些應用程序。或者可能嗎?

UPDATE2:

我認爲存儲文件的getExternalFilesDir(),但下面的正式警告是讓我非常緊張(什麼寫什麼?):

注意事項雖然提供的目錄getExternalFilesDir()和 getExternalFilesDirs()不是由MediaStore內容提供商 訪問,其他應用程序與READ_EXTERNAL_STORAGE權限的用戶可以訪問 到外部存儲器上的所有文件,包括這些。如果您需要 完全限制文件的訪問權限,則應該將文件寫入 到內部存儲器。

+0

不能使用ZipInputStream封裝從ContentResolver打開的InputStream嗎? –

+0

沒想過。與ZipFileProvider相比,性能應該是可怕的,儘管當你必須遍歷整個文件來讀取最後一個zipEntry時... – Lakedaemon

回答

1

真的很討厭那個機器人不能共享的目錄來自同一developper一些應用程序。或者可能嗎?其可能的

幽州在此之前這一點,但你要設法避免它

的淵源,我在公衆下載目錄中保存的數據。這是一個簡單的解決方案,但它需要讀取權限,我想避免這種情況。

使用讀取權限沒有任何問題。或者爲此寫入許可。是否有任何特定原因希望避免它?

在適合您的兩個應用程序的位置添加讀取/寫入權限,並訪問您自己的重新使用的文件夾結構。它不一定是公共下載目錄。例如<com.MyCompanyNamespace>/Data

然後,你可以:

  1. 檢查您的文件夾
  2. 否則檢查公共文件夾,並移動到文件夾。
  3. 否則直接下載網站。

使用讀/寫比較沒有任何問題。你可以在應用程序商店或應用程序中說明爲什麼需要權限,以緩解他們的想法。

我知道你已經加載了更多的問題,但希望這個簡單的答案消除了需求。

+1

1)money:一些用戶避開要求權限的應用程序 2)security:如果惡意應用程序讀/寫權限訪問我的文件在外部存儲(比如getExternalFilesDir())並巧妙地篡改它們(以便應用程序有時崩潰)? – Lakedaemon

+0

@Lakedaemon雖然我同意第1點,但這是一個很小的百分比,大多數(如果不是全部的話)可以通過在安裝之前指定什麼權限來重新確定。又名應用程序之間存儲共享文件。不從設備讀取任何其他數據。 (如上所述)2.然後,您擊中了根本不讀取權限的其他受衆。這是可以接受的超出你的控制。但應該考慮,如果發生這種情況,它將不得不針對每個文件(不太可能是特定的)。所有應用程序/設備都會受到影響。你的應用不會被指責。 – Doomsknight

+0

如果每個應用程序在getExternalFileDirs()中寫入數據並要求讀取權限來訪問其他應用程序的數據,它確實提供了最佳的類性能,並要求單個讀取權限作爲權衡。 如果沒有更好的解決方案出現,我會接受你的答案。 – Lakedaemon

相關問題