webview相关资料
2016-09-09 16:48
295 查看
前言:如下内容是本人开发过程中记录的,没有顺序或者明显的分类,记录了webview使用到的场景,应该比较全了,有webview功能需求的朋友可以参考。
视频播放的实现:(使用系统原生的VideoView来实现)
1. 可以播放mp4格式的视频流,但需要下载完毕才能播放;另把mp4处理成m3u8格式的视频流,可以边下边播
2. 设置播放错误监听”videoView.setOnErrorListener“和开始播放监听“videoView.setOnPreparedListener”
判断Activity屏幕方向:
关于WebView页面的点击事件:
貌似webView.setOnClickListener事件是无法触发的,我们可以通过自定义WebView类的onTouchEvent方法来处理手指下去和上来的事件,来模拟点击事件:
注意:如果WebView加载的页面也有点击事件,估计页面的事件不会执行(未测试)
1. 自定义WebView的子类:
Android编程下WebView加载一个网页时获取该页面中Cookie里的值:
小结:实现的方案是在WebViewClient 的 onPageFinished(WebView view, String url) 方法中使用 CookieManager 来获取加载完成之后网页中携带的 Cookie 值
另:将cookie信息带入到webview中,之前总是出现有时cookie读取成功有时不成功,找了半天发现将cookieManager.removeSessionCookie();这句去掉就好了,暂时还没有出现什么问题,由于原来的web应用是采用session验证,所以在读取cookie成功后也将session信息写入,这样就双保险了
在WebView上显示HTML内容,包括英文以及中文。有3种方法可以有用:
(1)使用loadData方法。
这种方法需要先将HTML内容进行编码,否则显示的中文会有乱码。
编码方法为:
调用fmtString方法:
notice1是自定义的HTML字符串,内容如下:
(2)使用loadDataWithBaseURL方法。
使用这个方法不需要先将HTML内容进行转码,直接可以显示:
(3)使用loadUrl方法。
使用这个方法的参数可以是网络上的某个网址,例如
也可以是本地的某个文件。这个文件必须存放在assets目录下面:
以上3种方法可以显示HTML内容在WebView上,但存有区别:
loadData方法显示的HTML都是居左对齐,不管align的值是left|center|right,结果都是居左对齐,并且显示中文的时候必须使用UrlEncoder进行编码。
loadDataWithBaseURL可以使用align属性,即可居左|居中|居右对齐,显示中文不需要UrlEncoder进行编码。
loadUrl显示的内容来自网络上或本地的某个问题。
以上就是全部内容,大家可以自个去试试,喜欢的朋友可以加个关注,以后有好的文章可以及时查阅讨论,有什么问题也可以留言,或者在微信公众号“技术帮团队”上找我们。
视频播放的实现:(使用系统原生的VideoView来实现)
1. 可以播放mp4格式的视频流,但需要下载完毕才能播放;另把mp4处理成m3u8格式的视频流,可以边下边播
2. 设置播放错误监听”videoView.setOnErrorListener“和开始播放监听“videoView.setOnPreparedListener”
//这个控件可以展示视频 videoView = (VideoView) findViewById(R.id.videoView); videoView.setMediaController(new MediaController(this));//MediaController自带的控制条 //不需要丢到子线程处理,videoView内部已开线程 videoView.setVideoURI(Uri.parse(url)); videoView.start();//-------------->开始播视频 //视频播放过程中出现异常回调下面方法 videoView.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer arg0, int arg1, int arg2) { //出现异常了,执行下面两个步骤即可 videoView.setVideoURI(Uri.parse(url)); videoView.start(); return true; } }); //视频可以播放前会触发下面监听(该方法执行说明下一步就是播放视频了,所以这里需要关闭提示对话框) videoView.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer arg0) { Log.e("TAG", "---onPrepared---"); videoView.setBackgroundColor(Color.argb(0, 0, 255, 0)); dialog.hide(); } }); videoView.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { Log.e("TAG", "---onCompletion---"); } });
判断Activity屏幕方向:
// 如果是全屏状态 按返回键则变成非全屏状态,否则执行返回操作 if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); quitFullScreen(); } else { if (webView.canGoBack()) { webView.goBack(); } else { finish(); } }
关于WebView页面的点击事件:
貌似webView.setOnClickListener事件是无法触发的,我们可以通过自定义WebView类的onTouchEvent方法来处理手指下去和上来的事件,来模拟点击事件:
注意:如果WebView加载的页面也有点击事件,估计页面的事件不会执行(未测试)
1. 自定义WebView的子类:
public class MyWebView extends WebView { private OnTouchScreenListener onTouchScreenListener; public MyWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyWebView(Context context, AttributeSet attrs) { super(context, attrs); } public MyWebView(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { if (onTouchScreenListener != null) onTouchScreenListener.onTouchScreen(); } if (event.getAction() == MotionEvent.ACTION_UP) { if (onTouchScreenListener != null) onTouchScreenListener.onReleaseScreen(); } return super.onTouchEvent(event); } public interface OnTouchScreenListener { void onTouchScreen(); void onReleaseScreen(); } public void setOnTouchScreenListener(OnTouchScreenListener onTouchScreenListener) { this.onTouchScreenListener = onTouchScreenListener; } } 2. 使用时,模拟setOnClickListener mWebView.setOnTouchScreenListener(new OnTouchScreenListener() { @Override public void onTouchScreen() { } @Override public void onReleaseScreen() { } });
Android编程下WebView加载一个网页时获取该页面中Cookie里的值:
private class MyWebViewClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebView view, String url) { webview.loadUrl(url); return true; } public void onPageFinished(WebView view, String url) { CookieManager cookieManager = CookieManager.getInstance();//Cookie管理者实例 String CookieStr = cookieManager.getCookie(url); Log.e("sunzn", "Cookies = " + CookieStr); super.onPageFinished(view, url); } }
小结:实现的方案是在WebViewClient 的 onPageFinished(WebView view, String url) 方法中使用 CookieManager 来获取加载完成之后网页中携带的 Cookie 值
另:将cookie信息带入到webview中,之前总是出现有时cookie读取成功有时不成功,找了半天发现将cookieManager.removeSessionCookie();这句去掉就好了,暂时还没有出现什么问题,由于原来的web应用是采用session验证,所以在读取cookie成功后也将session信息写入,这样就双保险了
在WebView上显示HTML内容,包括英文以及中文。有3种方法可以有用:
(1)使用loadData方法。
这种方法需要先将HTML内容进行编码,否则显示的中文会有乱码。
编码方法为:
private String fmtString(String str){ String notice = ""; try{ notice = URLEncoder.encode(str, "utf-8"); }catch(UnsupportedEncodingException ex){ } return notice; }
调用fmtString方法:
mWebView.loadData(fmtString(notice1), "text/html", "utf-8");
notice1是自定义的HTML字符串,内容如下:
private String blank = " "; private String notice1 = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>" + "<h3 align='center'>关于关闭电话银行语音系统查询动态密码功能的公告</h3></head>" + "<body>" + "<p align='center'><i>发布日期:2011-04-25</i>" + "</p><p>尊敬的客户:" + "</p><p>" + blank + "根据优化电话银行相关服务功能的整体安排,我行决定自4月25日起,在95595电话银行语音系统中,停止受理查询手机动态密码功能。给您带来的不便之处敬请谅解。如有问题,请致电我行24小时服务热线95595。" + "</p><p>" + blank + "感谢您长期以来对我行的关注、支持与厚爱!" + "</p><p>" + blank + "特此公告。" + "</p><p align='right'>中国光大银行" + "</p><p align='right'>2011年4月25日</p></body></html>";
(2)使用loadDataWithBaseURL方法。
使用这个方法不需要先将HTML内容进行转码,直接可以显示:
mWebView.loadDataWithBaseURL("about:blank", notice1, "text/html", "utf-8", null);
(3)使用loadUrl方法。
使用这个方法的参数可以是网络上的某个网址,例如
mWebView.loadUrl("http://www.baidu.com");
也可以是本地的某个文件。这个文件必须存放在assets目录下面:
mWebView.loadUrl("file:///android_asset/notice01.html");
以上3种方法可以显示HTML内容在WebView上,但存有区别:
loadData方法显示的HTML都是居左对齐,不管align的值是left|center|right,结果都是居左对齐,并且显示中文的时候必须使用UrlEncoder进行编码。
loadDataWithBaseURL可以使用align属性,即可居左|居中|居右对齐,显示中文不需要UrlEncoder进行编码。
loadUrl显示的内容来自网络上或本地的某个问题。
以上就是全部内容,大家可以自个去试试,喜欢的朋友可以加个关注,以后有好的文章可以及时查阅讨论,有什么问题也可以留言,或者在微信公众号“技术帮团队”上找我们。
相关文章推荐
- Axis的Web服务开发 --- 相关资料摘录
- Perl_Web_Services技术相关资料
- Web开发相关必看资料备忘
- WebView相关知识
- Android WebView相关属性
- 一些有关sharepoint WebServices相关资料
- Webview在实际开发中比较实用资料
- android WebView以及模拟器大小的相关设置
- Android 关于WebView的相关属性
- webview相关链接
- ArcGIS WEB开发相关资料下载及配置
- WebView 中的相关方法大解析
- WebView 学习相关笔记
- web服务器的相关资料 ngix
- Android WebView相关属性
- WebRebuild第三届年会"菩提树下"介绍及相关资料下载
- WebView宽度适应相关
- Android WebView 相关属性
- WebView资料合集
- Android中WebView的相关使用