2012-06-28 141 views
4

在任何基於Android的設備上是否存在共享內部存儲器這樣的事情?我知道您可以使用SDCard作爲應用程序之間的共享文件位置,但對於我正在處理的項目,我們不希望SD卡丟失(敏感材料)。Android共享內部存儲

問題如下。 App1允許用戶瀏覽(例如)一些Word文檔並將它們下載到建議的共享存儲中,然後用戶可以將該文件傳遞給Documents 2進行編輯並保存更改。然後,應用程序1允許上載更改的文件。

我不喜歡將文檔編輯器word/excel直接構建到應用程序中,除非這很容易?

編輯:

第二個應用是「文檔2轉到」我不能編輯它AndroidManifest

+0

可以嘗試內容提供者 –

+0

我也試過了 - fos = openFileOutput(「test4.doc」,Context.MODE_WORLD_READABLE);它允許讀取文件但不保存MODE_WORLD_WRITEABLE不會讓文件被docs2go讀取:( – Andy

回答

0

相信ContentProviders是您的解決方案。它是Android推薦的用於在不同應用之間共享應用數據的方法。

0

https://stackoverflow.com/a/6708681/804447

應用程序之間共享數據是什麼ContentProviders是。假設您知道如何編寫ContentProvider並訪問它,可以通過ParcelFileDescriptor訪問文件,ParcelFileDescriptor包含創建文件的模式的常量。

您現在需要的是限制訪問權限,以便不是每個人都可以通過內容提供者讀取文件,而是通過android權限執行此操作。在一個你的應用程序的清單,一個將主機上的文件和內容提供商,寫的是這樣的:使用的ProtectionLevel =

<uses-permission android:name="com.example.android.provider.ACCESS" /> 

<permission android:name="com.example.android.provider.ACCESS" android:protectionLevel="signature"/> 

,並在這兩個應用程序添加此「簽名」,只有您簽名的應用才能訪問您的內容提供商,從而訪問您的文件。

+0

我將無法在兩個應用程序中訪問清單隻有我們的應用程序 – Andy

1

我對txt文件現在面臨類似的情況,並做到了這一點。

File downloadedFile= new File(context.getFilesDir(), "simple.txt"); 
downloadedFile.setReadable(true, false); 
downloadedFile.setWritable(true, false); //set read/write for others 
Uri downloadFileUri = Uri.fromFile(downloadedFile); 
Intent intentToEditFile = new Intent(Intent.ACTION_EDIT); 
intentToEditFile.setDataAndType(downloadFileUri, "text/plain"); 
context.startActivity(intentToEditFile); 

現在「文檔2轉到」編輯器將啓動編輯文件和 將能夠編輯simple.txt

注1:URI應從設置相同的文件對象創建與 setReadable()/setWritable
注2:其他用戶的讀寫權限可能不會反映在文件 系統中。有時我看不到rw-rw-rw-在adb shell中