方式一 通过 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 {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
mHomeHeadImageWebView.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
HDLoadingFragmentDialog.hide();
/**
* 向页面传
*/
mHomeHeadImageWebView.loadUrl("javascript: homeHeadeImageData('" + uid + "," + id + "')");
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
}
}
然后webView中进行使用
mHomeHeadImageWebView.setWebViewClient(new MyWebViewClient());
// 添加js交互接口类,并起别名 imagelistner
mHomeHeadImageWebView.addJavascriptInterface(new ClinicalInterface(this), "clinicalQuestRestul");
// js通信接口
public class ClinicalInterface {
private Context context;
public ClinicalInterface(Context context) {
this.context = context;
}
@JavascriptInterface
public void upLoadClinicalImage(final String deId, final String list) {
handler.post(new Runnable() {
@Override
public void run() {
}
});
}
}
1. ClinicalInterface 是html通信调用的接口,html调用的方法全部在里面定义
2. 在ClinicalInterface 通信接口中调用的方法 在android4.2版本以上,必须添加注解 @JavascriptInterface 才可以生效,否则页面是无法调用这个方法的
3. 本例中的upLoadClinicalImage方法 是页面要调用 的方法,并且传递两个参数过来
4. 页面要调用此接口,使用的对象 是 别名 clinicalQuestRestul
/**
* 控制在控制台上面输出的信息
*/
mHomeHeadImageWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
return true;
}
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
Log.d("clinical ", consoleMessage.message() + "from line" + consoleMessage.lineNumber() + "of"
+ consoleMessage.sourceId());
return true;
}
});
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);
}
}
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();
}
}