我有一个具有 pdf 下载功能的 webview 应用程序,用于从一些不同的网站下载 pdf 文件。我想知道如何在下载后立即打开pdf。我的应用程序中还没有 pdf 阅读器,因为我不知道如何应用它。
我已经阅读了我提出的类似问题的所有答案,但所有答案都不适用。问题是 pdf 的名称取决于上传者设置的内容,因此每个访问的网站的 pdf 文件的名称都会有所不同。
在下面的代码中,下载的pdf文件的生成名称是根据网站上的pdf名称生成的,不是我自己确定的。
是否可以根据代码打开 pdf 文件,还是应该更改代码?
package com.example.app;
public class WebViewActivity extends AppCompatActivity {
String url = "";
NetworkChangeListener networkChangeListener = new NetworkChangeListener();
private boolean multiple_files = true;
private static String file_type = "*/*";
private ValueCallback<Uri> file_data;
private ValueCallback<Uri[]> file_path;
private final static int file_req_code = 1;
private static final String TAG = WebViewActivity.class.getSimpleName();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
webView = findViewById(R.id.webView);
WebSettings appwebsettings = webView.getSettings();
appwebsettings.setLoadsImagesAutomatically(true);
appwebsettings.setJavaScriptEnabled(true);
appwebsettings.setAllowContentAccess(true);
appwebsettings.setAllowFileAccess(true);
url = getIntent().getStringExtra("URL_NAME");
webView.loadUrl(url);
webView.requestFocus();
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
swipeRefreshLayout.setEnabled(false);
super.onPageFinished(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
}
});
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M){
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)== PackageManager.PERMISSION_DENIED){
Log.d("permission", "permission denied to WRITE_EXTERNAL_STORAGE - requesting it");
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
requestPermissions(permissions,1);
}
}
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition,
String mimeType, long contentLength) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setMimeType(mimeType);
String cookies = CookieManager.getInstance().getCookie(url);
request.addRequestHeader("cookie",cookies);
request.addRequestHeader("User-Agent",userAgent);
request.setDescription("Downloading File");
request.setTitle(URLUtil.guessFileName(url,contentDisposition,mimeType));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,
URLUtil.guessFileName(url, contentDisposition, mimeType));
DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
downloadManager.enqueue(request);
Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_SHORT).show();
}
});
@Override
protected void onStart() {
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkChangeListener, filter);
super.onStart();
}
@Override
protected void onStop() {
unregisterReceiver(networkChangeListener);
super.onStop();
}
@Override
public void onBackPressed() {
if(webView.canGoBack()){
webView.goBack();
}else {
finish();
super.onBackPressed();
}
}
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
}
}
这是我的 Webview 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".WebViewActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
先感谢您。