ファイル共有の設定

アプリから別のアプリにファイルを安全に提供するには、 ファイルへの安全なハンドル(コンテンツ URI 形式)。Android FileProvider コンポーネントが生成するコンテンツ URI: XML でユーザーが指定した仕様に基づいて、ファイルが生成されます。このレッスンでは、デフォルトの アプリへの 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 認証局を指定しています。 生成するコンテンツ URI に使用する URI を FileProvider。 この例の認証局は com.example.myapp.fileprovider です。自分用 権限を指定するには、 android:package 値と文字列「fileprovider」追加します。関連資料 トピックについては、このモジュールの コンテンツ URI と、 android:authorities 属性。

次の要素の <meta-data> 子要素: <provider> は、目的のディレクトリを指定する XML ファイルを指します。 共有します。android:resource 属性は、ファイルのパスと名前です。 .xml 拡張子。このファイルの内容については、次のセクションで説明します。

共有可能なディレクトリを指定する

アプリ マニフェストに FileProvider を追加したら、次の操作を行います。 共有するファイルが入っているディレクトリを指定する必要があります。Pod の 作成するには、まず 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 であり、コンテンツ URI には <provider> 要素(com.example.myapp.fileprovider)、 パス myimages/、ファイル名です。

たとえば、FileProvider を次のように定義したとします。 使用して、そのファイルのコンテンツ URI を default_image.jpg の場合、FileProvider は 次の URI を実行します。

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

その他の関連情報については、以下をご覧ください。