WebView 可以很容易地用于从 web url 显示 PDF 文件,但是如果你有本地 PDF 文件,那么它就会变得很痛苦。
就我而言,我首先存储了本地文件的引用:-
File file = new File(getExternalFilesDir(null),"your_pdf_file.pdf");
然后我使用 FileProvider 获得了本地 PDF 文件的文件路径 URI,并开始使用可以打开 PDF 文档的现有应用程序打开它:-
try{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(FileProvider.getUriForFile(BaseActivity.this,BuildConfig.APPLICATION_ID +".provider",file), "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(BaseActivity.this,"No Application Available to View PDF",Toast.LENGTH_SHORT).show();
}
同样要使用 FileProvider API,您需要在清单中将其声明为:-
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
并将 XML 资源文件夹下的 file_paths.xml 声明为:-
<paths>
<external-path name="external_files" path="."/>
</paths>