您的位置:首页 > 移动开发

WebView加载H5页面及自动播放网页内置的音乐的方法

2017-02-13 12:20 1076 查看

1.添加权限

<uses-permission android:name="android.permission.INTERNET" />


2.布局文件

<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent" />


3.简单的加载H5页面:

加载本地页面:

//注意:需要把本地的H5页面文件等存放在assets目录下
webView.loadUrl("file:///android_asset/test.html");


加载网络页面:

webView.loadUrl("http://www.baidu.com");


4. 添加请求头信息:

Map<String,String> map=new HashMap<String,String>();
map.put("User-Agent","Android");
webView.loadUrl("www.xxx.com/index.html",map);


5.添加html片段:

String data = " Html 数据";
webView.loadDataWithBaseURL(null,data, "text/html", "utf-8",null);


5.设置与H5交互,主要是调用如下代码:

开启与javascript的交互,添加js中要调用的方法


WebSettings webSettings = webView.getSettings();
//设置支持javascript
webSettings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptInterface(), "javaScript函数方法名");


6 JavaScriptInterface 接口定义

例如:要出发js的一个函数来关闭Activity

public class JavaScriptInterface {
@android.webkit.JavascriptInterface
public void doTrainFinish() {
finish();
}
}


7设置WebViewClient 主要辅助WebView处理各种通知、请求事件

比如要实现WebView中链接在WebView内部跳转

webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});


除此之外WebViewClient更多的处理网页的地址的解析和渲染,例如

onLoadResource//加载资源时响应
  onPageStart//在加载页面时响应
  onPageFinish//在加载页面结束时响应
  onReceiveError//在加载出错时响应
  onReceivedHttpAuthRequest//获取返回信息授权请求


8.设置WebChromeClient主要辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等

比如加载进度获取title

webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
//网页加载完成
} else {
//网页加载中
}
}
});


除了上面检测进度之外还有

  onCloseWindow//关闭WebView
  onCreateWindow() //触发创建一个新的窗口
  onJsAlert //触发弹出一个对话框
  onJsPrompt //触发弹出一个提示
  onJsConfirm//触发弹出确认提示
  onProgressChanged //加载进度
  onReceivedIcon //获取网页icon
  onReceivedTitle//获取网页title


9.设置网页栈返回

webview会默认把浏览过去的网页进行压栈存储,所以我们有时需要实现回退到上一目录


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webView.canGoBack()) {
webView.goBack();//返回上一浏览页面
return true;
} else {
finish();//关闭Activity
}
}
return super.onKeyDown(keyCode, event);
}


10.WebView 缓存控制

LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
WebSettings webSettings = webView.getSettings();
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);


11.WebView屏幕自适应

```
WebSettings webSettings = webView.getSettings();
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
```


12.其他不常用设置

```
WebSettings webSettings = webView.getSettings();
webSettings.setSupportZoom(true);  //支持缩放
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
webSettings.supportMultipleWindows();  //多窗口
webSettings.setAllowFileAccess(true);  //设置可以访问文件
webSettings.setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
webSettings.setBuiltInZoomControls(true); //设置支持缩放
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
web
baa0
Settings.setLoadsImagesAutomatically(true);  //支持自动加载图片
```


13.知识扩展WebViewJSBridge

虽然谷歌也提供了js与native函数互相调用的方式,但是通过addjavascriptInterface这种方式在Android 4.2以下版本存在一定的安全隐患,在Android 4.2以上也需要加@JavascriptInterface注解,否则无法调用。基于上面的原因建议学习一下

WebViewJSBridge这个比较不错的开源框架,地址:https://github.com/firewolf-ljw/WebViewJSBridge

14.硬件加速

开启硬件加速强制使用GPU渲染,确实给app流畅度带来不小的提升,但是在使用过程中遇见webview闪烁,也有导致加载webView黑屏或者白屏

解决办法:关闭硬件加速

webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

这是把webview 中的硬件加速关闭。设置LAYER_TYPE_SOFTWARE后会把当前view转为bitmap保存。这样就不能开多个webview,否则会报out of memory。

需要在在webview中加入如下代码

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
invalidate();
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}


15.自动播放网页音乐:

只需要把多媒体播放需要用户手动触发的改为false即可。


//自动播放音乐
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
webViewSettings.setMediaPlaybackRequiresUserGesture(false);
}


本文参考http://www.cnblogs.com/whoislcj/p/5645025.html的博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android webview