问题描述
API 30 引入了与 WebView
中的文件访问相关的更改:
/**
* Enables or disables file access within WebView.
* Note that this enables or disables file system access only. Assets and resources
* are still accessible using file:///android_asset and file:///android_res.
* <p class="note">
* <b>Note:</b> Apps should not open {@code file://} URLs from any external source in
* WebView,don't enable this if your app accepts arbitrary URLs from external sources.
* It's recommended to always use
* <a href="{@docRoot}reference/androidx/webkit/WebViewAssetLoader">
* androidx.webkit.WebViewAssetLoader</a> to access files including assets and resources over
* {@code http(s)://} schemes,instead of {@code file://} URLs. To prevent possible security
* issues targeting {@link android.os.Build.VERSION_CODES#Q} and earlier,you should explicitly
* set this value to {@code false}.
* <p>
* The default value is {@code true} for apps targeting
* {@link android.os.Build.VERSION_CODES#Q} and below,and {@code false} when targeting
* {@link android.os.Build.VERSION_CODES#R} and above.
*/
public abstract void setAllowFileAccess(boolean allow);
首先下载 PDF 然后通过 "file:///android_asset/pdfjs/web/viewer.html?file=${path/to/file}"
显示它来利用 PDF.js 的应用程序将不再工作。强制 setAllowFileAccess
到 true
是可能的,但不鼓励。
WebViewAssetLoader
作为替代方案,但它似乎适用于专注于从 /assets
目录或 /res
目录加载本地文件的用例。
问题:
解决方法
您可能想尝试使用 https://developer.android.com/reference/androidx/webkit/WebViewAssetLoader.InternalStoragePathHandler
它适用于加载存储在应用程序的 files
目录中的 pdf。
回答您的问题: