Android
FileProvider
サーチ…
ファイルの共有
この例では、他のアプリとファイルを共有する方法を学習します。この例ではpdfファイルを使用しますが、このコードは他のすべての形式でも動作します。
ロードマップ:
共有したいファイルが置かれているディレクトリを指定する
ファイルを共有するために、アプリケーション間の安全なファイル共有を可能にするFileProviderクラスを使用します。 FileProviderはあらかじめ定義されたディレクトリ内のファイルのみを共有できるので、これらを定義しましょう。
パスを含む新しいXMLファイルを作成します。例えば、 res / xml / filepaths.xml
パスを追加する
<paths xmlns:android="http://schemas.android.com/apk/res/android"> <files-path name="pdf_folder" path="documents/"/> </paths>
FileProviderを定義し、ファイルパスにリンクする
これはマニフェストで行われます。<manifest>
...
<application>
...
<provider
android:name="android.support.v4.context.FileProvider"
android:authorities="com.mydomain.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
...
</application>
...
</manifest>
ファイルのURIを生成する
ファイルを共有するには、ファイルの識別子を指定する必要があります。これは、URI(Uniform Resource Identifier)を使用して行われます。// We assume the file we want to load is in the documents/ subdirectory
// of the internal storage
File documentsPath = new File(Context.getFilesDir(), "documents");
File file = new File(documentsPath, "sample.pdf");
// This can also in one line of course:
// File file = new File(Context.getFilesDir(), "documents/sample.pdf");
Uri uri = FileProvider.getUriForFile(getContext(), "com.mydomain.fileprovider", file);
コードでわかるように、まずファイルを表す新しいFileクラスを作成します。 URIを取得するには、FileProviderに問い合わせてください。 2番目の引数は重要です:それはFileProviderの権限を渡します。これは、マニフェストで定義されているFileProviderの権限と等しくなければなりません。
他のアプリとファイルを共有する
ShareCompatを使って他のアプリとファイルを共有します:Intent intent = ShareCompat.IntentBuilder.from(getContext())
.setType("application/pdf")
.setStream(uri)
.setChooserTitle("Choose bar")
.createChooserIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Context.startActivity(intent);
選択機能は、ユーザーがファイルを共有したいアプリケーションを選択できるメニューです。フラグIntent.FLAG_GRANT_READ_URI_PERMISSIONは、URIへの一時的な読み取りアクセス許可を与えるために必要です。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow