3.3 WebViewClient
3.3.1shouldOverrideUrlLoading(重定向时回调)
3.3.2 onPageStarted(开始加载网络)
3.3.3 onPageFinished(网页加载完成回调)
3.3.4 onLoadResoure(加载Url资源回调)
3.3.5 shoudIdInterceptRequest
3.3.6 onReceivedError(访问地址错误回调)
3.3.7 onFormResubm(post请求)
3.3.8 doUpdateVisitedHistory(更新数据库)
3.3.9 onReceivedSsslError(加载SSL错误回调)
3.3.10 onReceivedHttpAuthRequest(auth请求回调)
3.3.11 shouldOverrideKeyEvent(按键处理回调)
3.3.12onScaleChanged(WebView比例改变)
3.3.13 onReceivedLoginRequest(账户自动登录)
/**
* onReceivedError
* <p>
* 当浏览器访问制定的网址发生错误时会通知我们应用程序 参数说明:
* </p>
*
* @param view
* 接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new
* MyAndroidWebViewClient()),即是这个webview。
* @param errorCode
* 错误号可以在WebViewClient.ERROR_* 里面找到对应的错误名称。
* @param description
* 描述错误的信息
* @param failingUrl
* 当前访问失败的url,注意并不一定是我们主url
*/
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// TODO Auto-generated method stub
super.onReceivedError(view, errorCode, description, failingUrl);
view.loadUrl("file:///android_asset/error.html");
Log.i(TAG, "onReceivedError");
}
这样就在main文件夹下创建了一个和res文件夹同级的assets文件夹了:
说明:这种方式可以加载assets目录下的网页,并且与网页有关的css,js,图片等文件也会加载。
1、新建assets资源文件
右键单击main目录,选择New>Folder>Assets Folder. 勾选Change Folder Location可改变其默认路径
在Assets目录下新建html、css等文件夹,把相应html和资源文件copy进去
2、Webview加载资源文件
String url = "file:///android_asset/index.html";
webview.loadUrl(url);
3、HTML内引入资源文件
<link rel="stylesheet" type="text/css" href="file:///android_asset/css/jquery.mobile-1.4.2.min.css">
<script src="file:///android_asset/js/jquery-1.7.1.min.js"></script>
2.访问assets目录下的资源文件:
// 读取Assets文件夹下对应文件的输入流
InputStream is = getAssets().open("asset_test.txt");
// 读取Assets文件夹下mysw文件夹内对应文件的输入流
InputStream is2 = getAssets().open("mysw/asset_test.txt");
4.将assets下的文件复制到SD卡
/**
* 从assets目录中复制整个文件夹内容
* @param context Context 使用CopyFiles类的Activity
* @param oldPath String 原文件路径 如:/aa
* @param newPath String 复制后路径 如:xx:/bb/cc
*/
public void copyFilesFassets(Context context,String oldPath,String newPath) {
try {
String fileNames[] = context.getAssets().list(oldPath);//获取assets目录下的所有文件及目录名
if (fileNames.length > 0) {//如果是目录
File file = new File(newPath);
file.mkdirs();//如果文件夹不存在,则递归
for (String fileName : fileNames) {
copyFilesFassets(context,oldPath + "/" + fileName,newPath+"/"+fileName);
}
} else {//如果是文件
InputStream is = context.getAssets().open(oldPath);
FileOutputStream fos = new FileOutputStream(new File(newPath));
byte[] buffer = new byte[1024];
int byteCount=0;
while((byteCount=is.read(buffer))!=-1) {//循环从输入流读取 buffer字节
fos.write(buffer, 0, byteCount);//将读取的输入流写入到输出流
}
fos.flush();//刷新缓冲区
is.close();
fos.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//如果捕捉到错误则通知UI线程
MainActivity.handler.sendEmptyMessage(COPY_FALSE);
}
}
该方法调用时的代码:music为assets目录下面的文件夹,里面包括具体的文件
copyFilesFassets(this, "music", "sdcard/clock");