如要安全地提供應用程式檔案給其他應用程式,您必須將應用程式設為提供
檔案的安全控制代碼,採內容 URI 格式。Android
FileProvider
元件會產生內容 URI
產生的檔案。本課程將說明如何新增預設值
在應用程式中實作 FileProvider
,以及如何
指定要提供給其他應用程式的檔案
注意:FileProvider
類別屬於
AndroidX 核心程式庫。資訊
如果想在應用程式中加入這個程式庫,請參閱
宣告依附元件。
指定 FileProvider
定義應用程式的 FileProvider
時,您必須在
資訊清單。此項目指定使用產生內容 URI 的權限,以及
指定應用程式可共用目錄的 XML 檔案名稱。
下列程式碼片段說明如何將
<provider>
元素,指定
FileProvider
類別、權威和
XML 檔案名稱:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application ...> <provider android:name="androidx.core.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
屬性會指定 URI 授權數量
您要用於
FileProvider
。
在這個範例中,主機名稱為 com.example.myapp.fileprovider
。為自己
指定應用程式的主機名稱
具有「fileprovider」字串的 android:package
值。瞭解詳情
有關權威值,請參閱
內容 URI 和
android:authorities
屬性。
應用程式的 <meta-data>
子元素
<provider>
指向一個 XML 檔案,用於指定您想要存取的目錄
分享。android:resource
屬性是檔案的路徑和名稱,但不含
.xml
副檔名。下一節將說明此檔案的內容。
指定可共用的目錄
將 FileProvider
加入應用程式資訊清單後,
您需要指定包含要共用檔案的目錄。如要指定
請先在 res/xml/
中建立 filepaths.xml
檔案
子目錄在這個檔案中,新增以下項目的 XML 元素來指定目錄:
每個目錄以下程式碼片段為
res/xml/filepaths.xml
。該程式碼片段也示範如何共用子目錄
位於內部儲存空間區域的 files/
目錄:
<paths> <files-path path="images/" name="myimages" /> </paths>
在這個範例中,<files-path>
標記共用了
應用程式內部儲存空間的 files/
目錄。path
屬性
共用 files/
的 images/
子目錄。name
屬性會指示 FileProvider
新增路徑區段
將 myimages
設為 files/images/
子目錄中檔案的內容 URI。
<paths>
元素可包含多個子項,每個子項都指定不同的
要共用目錄除了 <files-path>
元素外,您還可以
使用 <external-path>
元素共用外部儲存空間中的目錄。
<cache-path>
元素,用於共用內部快取中的目錄
目錄。如要進一步瞭解指定共用目錄的子元素,請參閱
FileProvider
參考說明文件。
注意:XML 檔案是唯一可用來指定目錄的方式 分享;您無法透過程式輔助方式新增目錄
現在,您已擁有 FileProvider
的完整規格
可針對應用程式 files/
目錄中的檔案產生內容 URI
內部儲存空間或 files/
子目錄中的檔案。應用程式產生
檔案的內容 URI,其中包含
<provider>
個元素 (com.example.myapp.fileprovider
),
myimages/
路徑,以及檔案名稱。
舉例來說,如果您根據FileProvider
您必須將檔案的內容 URI
default_image.jpg
,FileProvider
會傳回
存取 URI:
content://com.example.myapp.fileprovider/myimages/default_image.jpg
如需其他相關資訊,請參閱: