設定檔案分享

如要安全地提供應用程式檔案給其他應用程式,您必須將應用程式設為提供 檔案的安全控制代碼,採內容 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 值。瞭解詳情 有關權威值,請參閱 內容 URIandroid: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.jpgFileProvider 會��回 存取 URI:

content://com.example.myapp.fileprovider/myimages/default_image.jpg

如需其他相關資訊,請參閱: