我有一个带有单一webview的Xamarin Android应用程序。我想在该webview中显示本地文件夹中的PDF。
这是我的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<WebView
android:id="@+id/pdfContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
这是我的活动代码:
[Activity(Label = "ViewPdfActivity", ParentActivity = typeof(IssueDetailsActivity))]
public class ViewPdfActivity : Activity
{
private WebView pdfContainer;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.ViewPdf);
this.pdfContainer = this.FindViewById<WebView>(Resource.Id.pdfContainer);
this.pdfContainer.SetBackgroundColor(Color.Black);
this.pdfContainer.SetWebChromeClient(new WebChromeClient());
var toolbar = this.FindViewById<Toolbar>(Resource.Id.toolbar);
this.SetActionBar(toolbar);
this.ActionBar.SetDisplayHomeAsUpEnabled(true);
var pdfUrl = Intent.GetStringExtra("PdfUrl");
this.LoadPdf(pdfUrl);
}
private void LoadPdf(string pdfUrl)
{
var file = $"file://{System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)}/{pdfUrl}";
this.pdfContainer.LoadUrl(file);
this.pdfContainer.SetWebChromeClient(new WebChromeClient());
}
}
当我运行代码时,我看到一个空页面。控制台调试输出显示了一些我无法真正与此特定事物相关的信息,但仍然可能是:
05-02 19:47:56.104 E / libEGL(4263):validate_display:99错误3008(EGL_BAD_DISPLAY) 05-02 19:47:56.172 W / VideoCapabilities(4263):无法识别的配置文件2130706433 for video / avc 05-02 19:47:56.276 I / VideoCapabilities(4263):视频/ mp4v-es不支持的配置文件4
我已添加了INTERNET权限,如Android文档中所述。
是的,该文件存在。我在导航到此活动之前执行File.Exists以检查是否已下载。
答案 0 :(得分:0)
Android WebView无法像iOS那样读取本地pdf文件。 您可以做的最好的事情是使用手机的默认PDF阅读器打开文件。
这是打开pdf的代码:
//Copy the private file's data to the EXTERNAL PUBLIC location
var externalPath = Environment.ExternalStorageDirectory.Path + "/{name of your pdf file}.pdf";
File.WriteAllBytes(externalPath, pdfDocument);
Java.IO.File file = new Java.IO.File(externalPath);
file.SetReadable(true);
Android.Net.Uri uri = Android.Net.Uri.FromFile(file);
Intent intent = new Intent(Intent.ActionView);
intent.SetDataAndType(uri, "application/pdf");
intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);
this.StartActivity(intent);
希望这有帮助。