Android学习WebView交互开发总结
2017-05-26 11:40
627 查看
一、WebSettings
1、webSettings.setBuiltInZoomControls(true); //放大/** * 防止webview缩放时退出崩溃。 */ @Override public void finish() { ViewGroup view = (ViewGroup) getWindow().getDecorView(); view.removeAllViews(); super.finish(); }
2、webSettings.setJavaScriptEnabled(true);
//支持JS
3、webSettings.setUseWideViewPort(true);
//支持启动技术
4、webSettings.setLoadWithOverviewMode(true);
//支持加载时相关页面适配
5、webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持JS打开对话窗口
6、webSettings.setSupportMultipleWindows(true);//支持多窗口
7、String cacheDirPath = APP_CACAHE_DIRNAME;
mWebView.getSettings().setDatabasePath(cacheDirPath); //设置数据库缓存路径
mWebView.getSettings().setAppCachePath(cacheDirPath); //设置 应用 缓存目录
mWebView.getSettings().setDomStorageEnabled(true); //开启 DOM 存储功能
mWebView.getSettings().setDatabaseEnabled(true); //开启 数据库 存储功能
mWebView.getSettings().setAppCacheEnabled(true); //开启 应用缓存 功能
二、多窗口+返回键
if (webView.canGoBack() && keyCode==KeyEvent.keyCode_Back){webView.goBack();
}
三、JS实现交互
1、添加JS接口: webView.addJavascriptInterface(WebViewActivity.this, "JsInteration");//JsInteration 自定义名 与 web端代码function里对应
2、添加方法: @JavascriptInterface
public void TixianSubmit() {
Toast.makeText(WebViewActivity.this, "成功", Toast.LENGTH_LONG).show();
}
四、Client拦截url地址实现交互
1、首先让写web页面的人员 给出点击时跳转的url路径。2、拦截url的字符串相匹配,比如返回二级页面,这里url字符串查找是否包含“back_app”关键字。懂了吧
if(url.contains("back_app")) { finish(); }
3、比如这个是从webview交互跳转activity页面
if (url.contains("MyLuckLog")){//会员页面 startActivity(new Intent(WebViewCommonActivity.this,MemberRecord.class)); }
五、WebView优化
1、防止内存泄漏@Override protected void onDestroy() { super.onDestroy(); webView.removeAllViews(); webView.destroy(); }
要在当前持有webView的页面生命周期里 加上俩个释放的代码。
2、播放视频时,返回页面,声音依然存在问题。
@Override protected void onResume() { try { webView.getClass().getMethod("onResume").invoke(webView,(Object[])null);//继续播放视频 } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } super.onResume(); } @Override protected void onPause() { try { webView.getClass().getMethod("onPause").invoke(webView,(Object[])null);//停止视频播放 } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } super.onPause(); }
六、WebView缓存
1、缓存的是url、css、图片、Js等,有两种方式,一种是网页数据缓存,一种是H5AppCache缓存 ,但都会缓存到应有所在的数据库表中。2、五种模式:
1:Load_Cache_only 只读取缓存
2:Load_Default 根据Cache_Control决定是否网络获取
3:Load_Cache_Noraml API 17后 与 2相同
4:Load_No_Cache 不使用缓存只从网络获取
5:Load_Cache_Else_Netwrok 只要本地存在缓存 无论是否过期或no_cache,都用缓存
3、正确设置缓存模式:
if (NetWorkUtils.isNetworkConnected(this)){ webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); }else{ webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); }
4、清除WebView缓存
/** * 清除WebView缓存 */ public void clearWebViewCache() { /**清理Webview缓存数据库,缓存文件由程序自动生成 * /data/data/package_name/database/webview.db * /data/data/package_name/database/webviewCache.db **/ try { //因为他们都是文件,所以可以用io方式删除,具体方法可以自己写 deleteDatabase("webview.db"); deleteDatabase("webviewCache.db"); } catch (Exception e) { e.printStackTrace(); } //WebView 缓存文件 File webviewCacheDir = new File(APP_CACAHE_DIRNAME); //删除webview 缓存目录 if (webviewCacheDir.exists()) { //具体的方法自己写 deleteFile(webviewCacheDir); } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
相关文章推荐
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- android开发中,webview的js与Native code交互
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView(转)
- 转 Android开发学习笔记:浅谈WebView
- Android开发学习笔记 浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记之浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- Android开发学习笔记:浅谈WebView
- android开发学习笔记:浅谈WebView