共享文件
在此示例中,你将学习如何与其他应用共享文件。我们将在此示例中使用 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(统一资源标识符)来完成的。
// 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 为我们提供一个。第二个参数很重要:它传递了 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 的临时读访问权限。