1. 程式人生 > >Android設定檔案共享

Android設定檔案共享

要將應用程式中的檔案安全地提供給另一個應用程式,您需要配置應用程式,以內容URI的形式為檔案提供安全控制代碼。 Android FileProvider元件根據您在XML中提供的規範生成檔案的內容URI。 本文將向您展示如何將FileProvider的預設實現新增到您的應用程式,以及如何指定要提供給其他應用程式的檔案。

注意:FileProvider類是v4支援庫( v4 Support Library)的一部分

指定FileProvider

為應用程式定義FileProvider需要在清單中輸入一個條目。此條目指定用於生成內容URI的許可權,以及指定您的應用程式可以共享的目錄的XML檔案的名稱。

以下程式碼段顯示如何向清單中新增指定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的URI許可權。在示例中,許可權是com.example.myapp.fileprovider。對於你自己的應用程式,指定一個許可權組成的應用程式的android:package值與附加字串“fileprovider”。

<meta-data> , <provider>指向一個XML檔案,指定您要共享的目錄。 android:resource屬性是檔案的路徑和名稱,沒有.xml副檔名。此檔案的內容將在下一節中描述。

指定可分享目錄

將FileProvider新增到應用程式清單後,您需要指定包含要共享的檔案的目錄。要指定目錄,首先在專案的res / xml /子目錄中建立檔案filepaths.xml。在此檔案中,通過為每個目錄新增一個XML元素來指定目錄。以下程式碼段顯示了res / xml / filepaths.xml內容的示例。該程式碼段還演示瞭如何在內部儲存區域中共享檔案/目錄的子目錄:

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

在此示例中,<files-path>標記共享應用程式內部儲存的files /目錄中的目錄。 path屬性共享files /的images /子目錄。 name屬性指示FileProvider將路徑段myimages新增到files / images /子目錄中的檔案的內容URI。

<path>元素可以有多個子節點,每個子節點指定一個不同的目錄來共享。除了<files-path>元素,您還可以使用<external-path>元素共享外部儲存器中的目錄,使用<cache-path>元素共享內部快取目錄中的目錄。

注意:XML檔案是您可以指定要共享的目錄的唯一方法;您不能以程式設計方式新增目錄。

您現在有一個完整的FileProvider規範,為應用程式內部儲存器的檔案/目錄中的檔案或檔案/子目錄中的檔案生成內容URI。當您的應用為檔案生成內容URI時,它包含在<provider>元素(com.example.myapp.fileprovider)中指定的許可權,路徑myimages /和檔名稱。

例如,如果根據本課程中的片段定義FileProvider,並且請求檔案default_image.jpg的內容URI,FileProvider將返回以下URI:

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