Android中的webview详细使用
来源:互联网 发布:hive sql 编辑:程序博客网 时间:2024/05/27 01:10
webview向html传递参数
方式一 通过 cookie传参
CookieSyncManager.createInstance(this);CookieManager cookieManager = CookieManager.getInstance();cookieManager.setAcceptCookie(true);cookieManager.setCookie(mNewsUrl, "uid=" + uid);cookieManager.setCookie(mNewsUrl, "imnewsId=" + id);CookieSyncManager.getInstance().sync();
不过需要注意的是 在设置了 cookie后,webview的一些功能可能会无法正常使用
这里使用到的mNewsUrl 就是要传参的页面
方式二 通过js传参
mHomeHeadImageWebView.loadUrl("javascript: homeHeadeImageData('" + uid + "," + id + "')");
这个方法在使用的时候 最好是在页面加载完成后再进行调用,以防页面加载的时候 ,出现页面还没有初始化这个方法,造成传参失败的结果
private class MyWebViewClient extends WebViewClient {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {mHomeHeadImageWebView.loadUrl(url);return true;}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);HDLoadingFragmentDialog.hide();/** * 向页面传 */mHomeHeadImageWebView.loadUrl("javascript: homeHeadeImageData('" + uid + "," + id + "')");}@Overridepublic void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {}}
然后webView中进行使用
mHomeHeadImageWebView.setWebViewClient(new MyWebViewClient());
html与java通信,调用java中的方法
// 添加js交互接口类,并起别名 imagelistnermHomeHeadImageWebView.addJavascriptInterface(new ClinicalInterface(this), "clinicalQuestRestul");// js通信接口public class ClinicalInterface {private Context context;public ClinicalInterface(Context context) {this.context = context;}@JavascriptInterfacepublic void upLoadClinicalImage(final String deId, final String list) {handler.post(new Runnable() {@Overridepublic void run() {
}});}}
1. ClinicalInterface 是html通信调用的接口,html调用的方法全部在里面定义
2. 在ClinicalInterface 通信接口中调用的方法 在android4.2版本以上,必须添加注解 @JavascriptInterface 才可以生效,否则页面是无法调用这个方法的
3. 本例中的upLoadClinicalImage方法 是页面要调用 的方法,并且传递两个参数过来
4. 页面要调用此接口,使用的对象 是 别名 clinicalQuestRestul
webView加载的时候控制 控制台上面的输出内容
/** * 控制在控制台上面输出的信息 */mHomeHeadImageWebView.setWebChromeClient(new WebChromeClient() {@Overridepublic boolean onJsAlert(WebView view, String url, String message, JsResult result) {return true;}@Overridepublic boolean onConsoleMessage(ConsoleMessage consoleMessage) {Log.d("clinical ", consoleMessage.message() + "from line" + consoleMessage.lineNumber() + "of"+ consoleMessage.sourceId());return true;}});
设置webview的缓存数据
protected void initCommonFouncation(boolean b) {// 设置缓存的大小mHomeHeadImageWebView.getSettings().setAppCacheMaxSize(1024 * 10);// 设置缓存模式// 建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。if (isnetWork()) {mHomeHeadImageWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);// 优先使用缓存} else {mHomeHeadImageWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);}String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;// String cacheDirPath =// getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME;// 设置数据库缓存路径mHomeHeadImageWebView.getSettings().setDatabasePath(cacheDirPath);// 设置 Application Caches 缓存目录mHomeHeadImageWebView.getSettings().setAppCachePath(cacheDirPath);// 开启 Application Caches 功能mHomeHeadImageWebView.getSettings().setAppCacheEnabled(true);mHomeHeadImageWebView.loadUrl(mNewsUrl);}
清除webview的缓存缓存数据
public void clerWebviewCache() {if (mHomeHeadImageWebView != null) {mHomeHeadImageWebView.clearCache(true);mHomeHeadImageWebView.clearHistory();mHomeHeadImageWebView.clearFormData();}}/** * 清除WebView缓存 */public void clearWebViewCache() {// 清理Webview缓存数据库try {deleteDatabase("webview.db");deleteDatabase("webviewCache.db");} catch (Exception e) {e.printStackTrace();}// WebView 缓存文件File appCacheDir = new File(getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME);File webviewCacheDir = new File(getCacheDir().getAbsolutePath() + "/webviewCache");// 删除webview 缓存目录if (webviewCacheDir.exists()) {deleteFile(webviewCacheDir);}// 删除webview 缓存 缓存目录if (appCacheDir.exists()) {deleteFile(appCacheDir);}}/** * 递归删除 文件/文件夹 * * @param file */public void deleteFile(File file) {if (file.exists()) {if (file.isFile()) {file.delete();} else if (file.isDirectory()) {File files[] = file.listFiles();for (int i = 0; i < files.length; i++) {deleteFile(files[i]);}}file.delete();} else {}}
package com.administrator.interviewsummary;import android.app.Activity;import android.app.ProgressDialog;import android.graphics.Bitmap;import android.net.http.SslError;import android.os.Bundle;import android.os.Message;import android.view.InputEvent;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.Window;import android.webkit.ClientCertRequest;import android.webkit.HttpAuthHandler;import android.webkit.JsResult;import android.webkit.SslErrorHandler;import android.webkit.WebChromeClient;import android.webkit.WebResourceError;import android.webkit.WebResourceRequest;import android.webkit.WebResourceResponse;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;/*** * webview是基于webkit内核,它的运行效果与firefox上的一模一样 * webview与js的双向交互才是android中的webview功能强大所在 */public class MainActivity extends Activity { private WebView webview ; private ProgressDialog mProgressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去掉标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); //实例化WebView对象 webview = (WebView) findViewById(R.id.webview); //设置WebView属性,能够执行Javascript脚本 WebSettings settings = webview.getSettings(); //支持js脚本 settings.setJavaScriptEnabled(true); //设置启动缓存 settings.setAppCacheEnabled(true); //设置缓存的大小 settings.setAppCacheMaxSize(1024 * 10); //设置缓存模式 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//优先使用缓存 settings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用缓存 //设置缓存,离线应用 settings.setAppCacheEnabled(true) ; settings.setAppCacheMaxSize(1024 * 1024 * 8); settings.setCacheMode(WebSettings.LOAD_DEFAULT); //设置可以自动加载图片 settings.setLoadsImagesAutomatically(true); //设置可以访问文件 settings.setAllowFileAccess(true); //设置图片调整到适合webView的方法 settings.setUseWideViewPort(false); //设置支持多窗口的 settings.setSupportMultipleWindows(true); //支持缩放,设置成拖动放大缩小 settings.setSupportZoom(true ); settings.setBuiltInZoomControls(true) ; //支持内容从新布局 settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //加载需要显示的网页 webview.loadUrl("http://www.baidu.com/"); //加载本地的html //webview.loadUrl("file:///android_asset/example.html"); //点击链接留在当前的webview中进行数据的显示,而不是跳转到新的页面,重写这个方法 webview.setWebViewClient(new WebViewClient() { //请求的是链接,当返回的是true时候,打开新的链接不会跳转到浏览器那边 //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // return super.shouldOverrideUrlLoading(view, url); webview.loadUrl(url); return true; } //当开始载入页面的时候调用 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); //显示正在加载中的对话框 mProgressDialog.show(); } //当一个页面加载完成时候调用 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //隐藏正在加载的圣诞框的提示信息 mProgressDialog.dismiss(); } //加载页面资源会调用,每加载一次就会调用一次 @Override public void onLoadResource(WebView view, String url) { super.onLoadResource(view, url); } @Override public void onPageCommitVisible(WebView view, String url) { super.onPageCommitVisible(view, url); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { return super.shouldInterceptRequest(view, url); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { return super.shouldInterceptRequest(view, request); } @Override public void onTooManyRedirects(WebView view, Message cancelMsg, Message continueMsg) { super.onTooManyRedirects(view, cancelMsg, continueMsg); } //报告错误 @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); } @Override public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { super.onReceivedHttpError(view, request, errorResponse); } //应用程序重新请求网页数据 @Override public void onFormResubmission(WebView view, Message dontResend, Message resend) { super.onFormResubmission(view, dontResend, resend); } //更新历史记录 @Override public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { super.doUpdateVisitedHistory(view, url, isReload); } //重写此方法,可以让webview执行https请求 @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { super.onReceivedSslError(view, handler, error); } @Override public void onReceivedClientCertRequest(WebView view, ClientCertRequest request) { super.onReceivedClientCertRequest(view, request); } //返回信息授权请求 @Override public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { super.onReceivedHttpAuthRequest(view, handler, host, realm); } //重写此方法才可以处理浏览器中的按键事件 @Override public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) { return super.shouldOverrideKeyEvent(view, event); } //当key事件未被加载的时候调用 @Override public void onUnhandledKeyEvent(WebView view, KeyEvent event) { super.onUnhandledKeyEvent(view, event); } @Override public void onUnhandledInputEvent(WebView view, InputEvent event) { super.onUnhandledInputEvent(view, event); } //当webview发生改变的时候调用这个方法 @Override public void onScaleChanged(WebView view, float oldScale, float newScale) { super.onScaleChanged(view, oldScale, newScale); } @Override public void onReceivedLoginRequest(WebView view, String realm, String account, String args) { super.onReceivedLoginRequest(view, realm, account, args); } }); //设置webview中可以输入text webview.requestFocus(); //设置Web视图 //获取网页对话框 webview.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { //构建一个来显示网页中的对话框 return true; } @Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { return true; } //加载进度 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view,newProgress); } }) ; mProgressDialog = ProgressDialog.show(this, "请稍后", "页面正在加载中"); //webview获取焦点 webview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { webview.requestFocus(); return false; } }) ; } @Override //设置回退 //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法 public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); //goBack()表示返回WebView的上一页面 return true; } return false; } //Web视图 private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
加载html时,通过cookie进行数据传递
if (userinfo != null) {CookieSyncManager.createInstance(this);CookieManager cookieManager = CookieManager.getInstance();cookieManager.setAcceptCookie(true);cookieManager.setCookie(mNewsUrl, "uid=" + uid);cookieManager.setCookie(mNewsUrl, "id=" + id);CookieSyncManager.getInstance().sync();}
清除webview的缓存
public void clerWebviewCache(){if (mHomeHeadImageWebView != null) {mHomeHeadImageWebView.clearCache(true);mHomeHeadImageWebView.clearHistory();mHomeHeadImageWebView.clearFormData();}}
1 1
- Android中的webview详细使用
- Android中的webview详细使用(非常详细)
- Android中的WebView详细例子
- android webview 使用详细介绍
- Android中的WebView使用
- Android中的WebView使用(一)
- Android全面&详细的Webview使用攻略
- Android WebView 详细介绍
- android WebView 详细代码
- android WebView 详细解析
- webview详细使用
- Android使用webview时,webview中的轮播图显示不正常
- Android WebView中的JavaScript代码使用
- Android WebView中的JavaScript代码使用
- Android WebView中的JavaScript代码使用
- Android WebView中的JavaScript代码使用
- Android webview goback 使用cache中的网页
- Android使用WebView中的js跳转问题
- hello world
- 去掉 WordPress 3.1+版本顶部的admin bar管理工具
- hdu 4664 Triangulation(博弈)
- Matlab “Out of memory”解决办法
- android基础之ADB常用命令
- Android中的webview详细使用
- LeetCode16:3Sum Closest
- 计算机原理之c语言实现链表
- hdu 4665 Unshuffle(暴力)
- On Hat Puzzle 2.1: From Dr. Todd Ebert's thesis
- Linux下载安装sshd服务,用SecureCRT连接虚拟机
- 二维RMQ
- hdu 4666 Hyperspace(线段树)
- 声明map对象时你不知道的事