Android 如何在webview中使用下载管理器将pdf/ppt/doc文件下载到SD卡
我正在开发一个android应用程序,它使用webview打开我的网站(url:learnportal.me),然后在输入正确的凭据后,它将加载一个普通的html页面,该页面有多个要下载的链接(这些都是pdf/ppt/doc文件)。Android 如何在webview中使用下载管理器将pdf/ppt/doc文件下载到SD卡,android,webview,Android,Webview,我正在开发一个android应用程序,它使用webview打开我的网站(url:learnportal.me),然后在输入正确的凭据后,它将加载一个普通的html页面,该页面有多个要下载的链接(这些都是pdf/ppt/doc文件)。 所有这些都发生在webview中 我只想让下载直接在应用程序本身中进行,而不需要重定向到移动设备中的默认web浏览器 此外,我需要文件下载到SD卡 这是我目前正在处理的主要活动页面。。。但不确定它是否正确 public class MainActivity exte
所有这些都发生在webview中 我只想让下载直接在应用程序本身中进行,而不需要重定向到移动设备中的默认web浏览器 此外,我需要文件下载到SD卡 这是我目前正在处理的主要活动页面。。。但不确定它是否正确
public class MainActivity extends Activity {
@SuppressWarnings("deprecation")
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webview = new WebView(this);
webview.setWebChromeClient(new WebChromeClient());
WebViewClient client = new ChildBrowserClient();
webview.setWebViewClient(client);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
//webview.setInitialScale(1);
//webview.getSettings().setUseWideViewPort(true);
settings.setJavaScriptCanOpenWindowsAutomatically(false);
//settings.setBuiltInZoomControls(true);
settings.setPluginState(PluginState.ON);
settings.setDomStorageEnabled(true);
webview.loadUrl("http://learnportal.me");
//webview.setId(5);
//webview.setInitialScale(0);
//webview.requestFocus();
// webview.requestFocusFromTouch();
setContentView(webview);
}
/**
* The webview client receives notifications about appView
*/
public class ChildBrowserClient extends WebViewClient {
@SuppressLint({ "InlinedApi", "NewApi" })
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
boolean value = true;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
MimeTypeMap mime = MimeTypeMap.getSingleton();
String mimeType = mime.getMimeTypeFromExtension(extension);
if (mimeType != null) {
if (mimeType.toLowerCase().contains("pptx")
|| extension.toLowerCase().contains("pdf")
|| extension.toLowerCase().contains("doc")
|| extension.toLowerCase().contains("ppt")){
DownloadManager mdDownloadManager = (DownloadManager) MainActivity.this
.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(
Uri.parse(url));
File destinationFile = new File(Environment.getExternalStorageDirectory(),getFileName(url));
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setDescription("Downloading via LearnPortal..");
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationUri(Uri.fromFile(destinationFile));
mdDownloadManager.enqueue(request);
value = false;
}
}
if (value) {
view.loadUrl(url);
}
}
return value;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
/**
* Notify the host application that a page has started loading.
*
* @param view
* The webview initiating the callback.
* @param url
* The url of the page.
*/
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
}
/**
* File name from URL
*
* @param url
* @return
*/
public String getFileName(String url) {
String filenameWithoutExtension = "";
filenameWithoutExtension = String.valueOf(System.currentTimeMillis());
return filenameWithoutExtension;
}
}
使用DownloadListener并重写onDownloadStart
有关实际下载逻辑,请检查以下链接中的onDownloadStartNoStream
使用DownloadListener并重写onDownloadStart
有关实际下载逻辑,请检查以下链接中的onDownloadStartNoStream
当然,我会尝试一下。如果这里有人能根据我的要求修复我的上述代码,这将是一个很大的帮助。我已经为此工作了一周时间,试图找到合适的解决方案。我会尝试一下。如果这里有人能根据我的要求修复我的上述代码,这将是一个很大的帮助。我已经为此工作了一周时间试图找出合适的解决方案