Android 当我在webview中单击指向文件的链接时,什么也没有发生
我已经在我的应用程序中创建了一个webView来查看网站。当浏览网页时,它的效果很好。但当我在我的网络视图中点击指向某个服务器上存储的文件的文件链接时,它什么也不做 我打算它做的是将该文件下载到一个名为 存储上的XYZ 以下是我在Java文件中尝试的代码:Android 当我在webview中单击指向文件的链接时,什么也没有发生,android,webview,Android,Webview,我已经在我的应用程序中创建了一个webView来查看网站。当浏览网页时,它的效果很好。但当我在我的网络视图中点击指向某个服务器上存储的文件的文件链接时,它什么也不做 我打算它做的是将该文件下载到一个名为 存储上的XYZ 以下是我在Java文件中尝试的代码: package com.example.jdiet; import android.os.Bundle; import android.app.Activity; import android.content.res.Config
package com.example.jdiet;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.Configuration;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class Sessional extends Activity {
private WebView webView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sessional);
webView = (WebView)findViewById(R.id.webView1);
webView.getProgress();
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new MyWebViewClient());
webView.loadUrl("http://www.sgbau.ac.in");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.sessional, menu);
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
webView.goBack();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
}
private class MyWebViewClient extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
return super.shouldOverrideUrlLoading(view, url);
}
}
}
要下载文件,您可以查看 以下方法从URL提取文件名,并在应用程序的内部缓存目录中创建具有该名称的文件: 如果要在外部存储器上保存公共文件,请使用getExternalStoragePublicDirectory方法获取表示外部存储器上相应目录的文件。该方法采用一个参数,指定要保存的文件的类型,以便它们可以与其他公共文件(如DIRECTORY\u MUSIC或DIRECTORY\u PICTURES)进行逻辑组织。例如:
在webview中启用DownloadManager
mWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
浏览器负责下载。您有访问本地内存的权限吗?您想做什么?下载文件?在这种情况下,当url与pdf扩展名匹配时,您应该使用shouldOverrideUrlLoading方法编写自己的代码,并打开另一个应用程序。但我不知道你到底想做什么。编辑:webview无法自行下载文件。所以重写这个方法并创建一个AsyncTask来下载文件。@erad:Yeah。我在清单中添加了标签。你也读过吗?@CaptainTeemo:我想下载文件,不管它的扩展名是什么!你能给我举个例子说明一下吗。
public File getAlbumStorageDir(String albumName) {
// Get the directory for the user's public pictures directory.
File file = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e(LOG_TAG, "Directory not created");
}
return file;
}
mWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype,
long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});