Android官方開發文件Training系列課程中文版:分享檔案之配置檔案共享
原文地址:http://android.xsoftlab.net/training/secure-file-sharing/index.html
導言
APP經常需要給其它的APP提供一個或多個檔案。舉個例子,相簿APP可能需要提供檔案以供編輯,或者一個檔案管理的APP可能希望使用者在外部儲存器中的兩個區域之間複製貼上檔案。其中一種方式就是傳送端的APP可以分享檔案來響應接收端APP的請求。
在所有的例子中,使一個檔案從你的APP到另一個APP的唯一安全方式就是傳送這個檔案內容的URI地址到接收端APP,並且授予一個臨時的訪問許可權給這個URI。帶有臨時URI訪問許可權的內容URI是安全的,因為它只會被應用於接收這個URI的那個APP,並且會這個許可權會自動終止。Android的FileProvider元件提供了getUriForFile()方法來生成該檔案的內容URI地址。
如果你想分享少量的文字或者數字型資料,你應該傳送一個Intent,使這個Intent攜帶這些資料給其它APP。有關學習如何使用Intent來傳送簡單的資料,參見訓練課程Sharing Simple Data。
這節課解釋瞭如何使用Android FileProvider元件生成的內容URI安全的在APP之間共享檔案。
設定檔案共享
為了從你的APP安全的提供檔案給其它APP,你需要配置你的APP以便對檔案提供安全的防護。Android的FileProvider元件會基於在XML中提供的引數對檔案的相應URI地址,。這節課展示瞭如何給APP新增預設的FileProvider實現,以及展示如何指定你要分享給其它APP的檔案。
Note:FileProvider是v4支援包的一部分。有關程式中包含該庫的更多資訊,請參見:Support Library Setup。
指定FileProvider
給APP定義FileProvider需要在清單檔案中登記。在被登記的條目需要指定URI的許可權,和指定XML檔案的檔名一樣,這裡也需要指定被分享檔案的目錄。
下面這一小段程式碼展示瞭如何在清單檔案中新增< provider>元素,在這個元素中指明瞭FileProvider類,許可權和XML檔名:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
...>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.myapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
...
</application>
</manifest>
在這個例子中,屬性android:authorities指明瞭由FileProvider生成的URI的許可權,這裡的許可權值是com.example.myapp.fileprovider。在自己的APP中,許可權是由APP的android:package值以及跟隨的”fileprovider”字串組成。有關學習更多許可權值的課程,請參見話題:Content URIs以及android:authorities的屬性文件。
< provider>的子元素< meta-data>指向了一個XML檔案,這個XML檔案指定了你想要分享出去的目錄。屬性android:resource的值是要分享檔案的路徑與名稱,只是這個檔名不帶.xml字尾。檔案的內容會在下節課描述。
指定可搜尋目錄
一旦在清單檔案中新增了FileProvider,那麼你還需要指定將要分享的檔案目錄。如果要指定,首先需要在工程的res/xml/子目錄中建立一個名為filepaths.xml的檔案。在這個檔案中,通過給每個目錄新增相應的XML元素來指定它們的目錄。下面程式碼展示了res/xml/filepaths.xml檔案中的樣例,這段程式碼中還演示瞭如何分享內部儲存器中files/目錄下的子目錄:
<paths>
<files-path path="images/" name="myimages" />
</paths>
在這個例子中,標籤分享了一些目錄,這個目錄位於APP在內部儲存器中的files/目錄下。屬性path分享了files/目錄的子目錄images/目錄,屬性name則用於告訴FileProvider給檔案的URI新增files/images/子目錄下的路徑段 myimages。
< paths>元素可以擁有多個子元素,每一個元素分別指向相應的分享目錄。在附加的元素中,你可以使用元素來分享外部儲存器上的目錄,使用 元素分享內部儲存器上的目錄。學習更多有關分享指定目錄的子元素,請參見FileProvider的引用文件。
Note:使用XML檔案是分享指定目錄的唯一方式,你不可以動態的新增目錄。
你現在有了使用FileProvider對檔案生成相關URI的完整說明。當你的APP需要為檔案產生URI的時候,它包含了< provider>元素指定的許可權,以及檔案的路徑myimages/,還有檔案的名稱。
舉個例子,如果你通過這節課中的所有片段定義了一個FileProvider,以及你要請求一個default_image.jpg檔案的URI地址,那麼FileProvider會返回如下的URI:
content://com.example.myapp.fileprovider/myimages/default_image.jpg
相關文章
- Android官方開發文件Training系列課程中文版:Activity測試之測試環境配置AndroidAI
- Android官方開發文件Training系列課程中文版:Android的安全建議AndroidAI
- Android官方開發文件Training系列課程中文版:Activity測試之建立功能性測試AndroidAI
- 官方文件nodemanager 配置檔案和日誌檔案的路線圖
- 共享檔案和文件方法指南
- 檔案共享之nfsNFS
- PHP配置檔案中文版PHP
- Golang 專案之配置檔案Golang
- 細數檔案共享的發展歷程–資訊圖
- Vagrant 開啟 smb 檔案共享
- 【openEuler系列】部署檔案共享服務SambaSamba
- Android開發之SD卡上檔案操作 (轉)AndroidSD卡
- samba共享檔案Samba
- CIFS檔案共享
- 【pytest官方文件】解讀fixtures - 10. fixture有效性、跨檔案共享fixtures
- redhat7 配置檔案共享服務Redhat
- Linux配置NFS實現檔案共享LinuxNFS
- Android 7.0應用之間共享檔案Android
- Android開發之音訊配置檔案audio_policy.conf解析全過程Android音訊
- android怎麼訪問win10共享檔案_android如何訪問win10共享檔案AndroidWin10
- 微信開發之錄音檔案
- nginx 文件地址及配置檔案入門Nginx
- Android開發之專案經驗分享Android
- 公開課錄影檔案 + oracle 各種系統下安裝檔案+ 最新電影分享Oracle
- 使用Samba共享檔案Samba
- Mac檔案共享工具Mac
- 檔案共享服務
- 智汀雲盤-網盤開發golagn:共享檔案Go
- cifs檔案系統{samba檔案共享服務}Samba
- RAC歸檔配置方案:使用NFS共享儲存儲存歸檔檔案NFS
- linux配置檔案之薦Linux
- 如何實現檔案共享,檔案共享的設定方法-鐳速
- Android之XML檔案解析AndroidXML
- iOS 開發之解析Json檔案iOSJSON
- Mybatis基礎:Mybatis對映配置檔案,Mybatis核心配置檔案,Mybatis傳統方式開發MyBatis
- 開發nagios修改配置檔案平臺iOS
- PHP開發laravel框架的.env檔案配置PHPLaravel框架
- ?從零開始學習webpack系列二(配置檔案)Web