2013-08-23 45 views
0

任何人都可以建議我們如何共享n個Android應用程序之間的文件?向我推薦任何鏈接,代碼等?提前致謝 !!在android應用程序之間共享文件?

+1

使用內容提供程序在n個Android應用程序之間共享SQLite數據庫等數據。 – Rahul

+0

使用'Environment.getExternalStoragePublicDirectory(「」)'調用獲取公共目錄路徑。 –

回答

6

看看android.support.v4.content.FileProvider。該組件可以通過內容URI將文件從一個應用程序共享到系統中的任何其他應用程序,從而允許託管應用程序使用URI(而不僅僅是文件)權限來控制文件。這意味着託管應用程序可以設置臨時訪問權限,而不是永久更改文件的權限。沒有性能損失,所以每次應用程序需要一個文件時,它都可以獲得內容URI和臨時權限。非常安全。

FileProvider是ContentProvider的子類,其工作方式大致相同。

當前參考文檔有點含糊。我會試着總結一下:

託管的應用程序需要聲明提供的清單:

<provider 
    android:name="android.support.v4.content.FileProvider" 
    android:authorities=authority 
    android:exported="false" 
    android:grantUriPermissions="true"> 
    <meta-data> 
     android:name="android.support.FILE_PROVIDER_PATHS" 
     android:resource="@xml/some_name" /> 
</provider> 
  • 「權威」是你做了一個URI權威。
  • some_name是你把你的項目(通常在xml/子目錄中的XML文件的名稱。

some_name.xml內容是

<paths> 
    <files-path name="path-segment" path="filepath"/> 
    ... 
</paths 

文件路徑

在您的私人文件區域共享文件(由Context.getFilesDir()返回的值),但您也可以共享文件您的外部區域和緩存區域。

filepath 

是您的私人文件區域中的子目錄,例如images/path-segment是進入內容URI的相應路徑。例如,如果您使用的

com.example.myapp.fileprovider 

的權威,把在

<files-path name="images" path="images/"> 

然後得到的內容URI與

content://com.example.myapp.fileprovider/images 

如果你想共享出來的文件圖像開始/ myimage.jpg,得到的內容URI是

content://com.example.myapp.fileprovider/images/myimage.jpg 

託管應用程序通過調用FileProvider來生成內容URI。getUriForFile()

有什麼不錯的是,你不必在代碼中實現FileProvider的子類;它的默認行爲足以滿足大多數人的需求。

查看javadoc瞭解更多信息。

相關問題