アプリから別のアプリにファイルを安全に提供するには、
ファイルへの安全なハンドル(コンテンツ 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
その他の関連情報については、以下をご覧ください。