android的web应用
Ⅰ android webview 有哪些软件应用
转载 本文主要对WebView进行介绍,包括webView 4个可以定制的点、设置WebView back键响应、控制网页的链接仍在webView中跳转、显示页面加载进度、处理https请求、利用addjavascriptInterface实现android程序和javascript交互等等
WebView基于webkit引擎展现web页面的控件,使用前需要在Android Manifest file中配置internet访问权限,否则提示页面无法访问
Xml代码 [url=][/url]
<uses-permission
android:name="android.permission.INTERNET"
/>
WebView控件功能强大,除了具有一般View的属性和设置外,还可以对url请求、页面加载、渲染、页面交互进行强大的处理。
WebView有几个可以定制的点:
(1)设置WebChromeClient子类,WebChromeClient会在一些影响浏览器ui交互动作发生时被调用,比如WebView关闭和隐藏、页面加载进展、js确认框和警告框、js加载前、js操作超时、webView获得焦点等等,详见WebChromeClient
(2)设置WebViewClient子类,WebViewClient会在一些影响内容喧嚷的动作发生时被调用,比如表单的错误提交需要重新提交、页面开始加载及加载完成、资源加载中、接收到http认证需要处理、页面键盘响应、页面中的url打开处理等等,详见WebViewClient
(3)设置WebSettings类,其中包含多项配置。WebSettings用来对WebView的配置进行配置和管理,比如是否可以进行文件操作、缓存的设置、页面是否支持放大和缩小、是否允许使用数据库api、字体及文字编码设置、是否允许js脚本运行、是否允许图片自动加载、是否允许数据及密码保存等等,详见WebSettings
(4)设置addJavascriptInterface方法,将java对象绑定到webView中,以方便从页面js中控制java对象,实现用本地java代码和html页面进行交互,甚至可以进行页面自动化。但如此做存在安全隐患,所以若设置了此方法,请确保webView的代码都是自己完成,详细使用addJavascriptInterface进行自动化见本文5使用addJavascriptInterface完成和js交互
1、back键控制网页后退
Activity默认的back键处理为结束当前Activity,webView查看了很多网页后,希望按back键返回上一次浏览的页面,这个时候我们就需要覆盖onKeyDown函数,告诉他如何处理,如下:
Java代码 [url=][/url]
public
boolean onKeyDown(int keyCode, KeyEvent event) {
if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
webView.goBack();
return
true;
}
return
super.onKeyDown(keyCode, event);
}
其中webView.canGoBack()在webView含有一个可后退的浏览记录时返回true
webView.goBack();表示返回webView的上次访问页面
2、当前网页的链接仍在webView中跳转
Java代码 [url=][/url]
webView.setWebViewClient(new WebViewClient() {
@Override
public
boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return
true;
}
});
shouldOverrideUrlLoading表示当前webView中的一个新url需要加载时,给当前应用程序一个处理机会,如果没有重写此函数,webView请求ActivityManage选择合适的方式处理请求,就像弹出uc和互联网让用户选择浏览器一样。重写后return true表示让当前程序处理,return false表示让当前webView处理
Xml代码 [url=][/url]
Give the host application a chance to take over the control when a new url is about to be loaded in the current WebView. If WebViewClient is not provided, by default WebView will ask Activity Manager to choose the proper handler for the url. If WebViewClient is provided, return true means the host application handles the url, while return false means the current WebView handles the url.
参考:
http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String)
问题分析:
今天在用webView load腾讯的OAuth页面http://open.t.qq.com/cgi-bin/authorize
时,突然弹出选择uc还是互联网浏览器的确认框,很奇怪,其他页面都能正常load,而这个却无法在webView中load,后来用火狐看了下是因为load这个页面的时候会重定向到另外一个页面http://open.t.qq.com/oauth_html/login.php?oauth_token=xxx&type=0,而webView没有设置shouldOverrideUrlLoading,导致url交给了ActivityManage去处理,解释如上,后添加后可正常load页面
3、页面加载进度
代码如下
Java代码 [url=][/url]
webView.setWebChromeClient(new WebChromeClient() {
public
void onProgressChanged(WebView view, int progress) {
setTitle("页面加载中,请稍候..." + progress + "%");
setProgress(progress * 100);
if (progress == 100) {
setTitle(R.string.app_name);
}
}
});
onProgressChanged通知应用程序当前页面加载的进度
progress
表示当前页面加载的进度,为1至100的整数
参考:
http://developer.android.com/reference/android/webkit/WebChromeClient.html#onProgressChanged(android.webkit.WebView, int)
4、处理https请求
webView默认是不处理https请求的,页面显示空白,需要进行如下设置:
Java代码 [url=][/url]
webView.setWebViewClient(new WebViewClient() {
@Override
public
void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
// handler.cancel();
// handler.handleMessage(null);
}
});
onReceivedSslError为webView处理ssl证书设置
其中handler.proceed();表示等待证书响应
handler.cancel();表示挂起连接,为默认方式
handler.handleMessage(null);可做其他处理
参考:
http://developer.android.com/reference/android/webkit/WebViewClient.html#onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError)
5、使用addJavascriptInterface完成和js交互
5.1 javascript中调用java对象及方法
设置webView的addJavascriptInterface方法,该方法有两个参数,第一个参数为被绑定到js中的类实例,第二个参数为在js中暴露的类别名,在js中引用java对象就是用这个名字
Java代码 [url=][/url]
ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs");
实现绑定到js的类,其中的javaMethod方法我们将在页面前端js中调用,用于返回一段内容。showHtml用来使用AlertDialog显示一段html代码,稍后将使用到
Java代码 [url=][/url]
private
class ClassBeBindedToJS{
public
void showHtml(String html){
new AlertDialog.Builder(UpdateStatusActivity.this)
.setTitle("HTML").setMessage(html)
.setPositiveButton(android.R.string.ok, null)
.setCancelable(false).create().show();
}
public String javaMethod() {
return
"use java method";
}
};
如此我们就可以在前端调用java对象,如下:
Html代码 [url=][/url]
<span><html>
<body>
<div
id="displayDiv">Test page.</div>
<input
type="button"
value="use java object"
onclick="document.getElementById('</span>displayDiv').innerHTML=classNameBeExposedInJs.javaMethod()"
/>
<span>
</body>
</html></span>
这段html作用为点击button按钮,改变div内容为java对象方法中的内容,其中classNameBeExposedInJs为java对象在js中的别名,javaMethod为java对象的方法
5.2 java中调用js方法
用webView的loadUrl实现,比如现在我们想在页面加载完成后调用js中的hello函数,实现如下:
Java代码 [url=][/url]
webView.setWebViewClient(new WebViewClient() {
@Override
public
void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:hello()");
}
});
怎么样,很简单吧^_^,直接loadUrl("javascript:hello()")就可以了
利用这一点我们可以很方便的实现WebView的自动化,如网页自动化登录。举个栗子,实现http://m.renren.com/ 的自动登录啊,代码如下
Java代码 [url=][/url]
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://m.renren.com");
webView.requestFocus();
ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs");
webView.setWebViewClient(new WebViewClient() {
@Override
public
void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:document.getElementsByName('email')[0].value='userName'");
webView.loadUrl("javascript:document.getElementsByName('password')[0].value='userPassword'");
webView.loadUrl("javascript:document.getElementsByName('login')[0].click()");
}
});
从中可以看出先加载http://m.renren.com页面,在页面加载完成onPageFinished后,调用js实现自动登录
其中三句js分别表示设置用户名文本框内容、设置用户密码文本框内容、点击登录按钮,如此登录成功喽
5.3 java和js混用实现一些效果
5.3.1 WebView用AlertDialog显示页面的html代码
之前5.1中的showHtml方法现在派上用场啦,在页面加载完成后显示页面html内容,如下:
Java代码 [url=][/url]
webView.setWebViewClient(new WebViewClient() {
@Override
public
void onPageFinished(WebView webView, String url){
webView.loadUrl("javascript:window.classNameBeExposedInJs.showHtml(document.getElementsByTagName('html')[0].innerHTML);");
}
});
其中webView.loadUrl表示调用页面中的js,而页面中的js window.classNameBeExposedInJs.showHtml调用了程序中的java对象的方法,方法参数为一段js。
首先webView会执行这一段js document.getElementsByTagName('html')[0].innerHTML。含义即为取得页面中html标记的innerHTML,及网页主要内容;
然后将得到的网页内容当作字符串参数传入showHtml方法
最后调用showHtml函数实现,即用AlertDialog显示字符串,如此得到了整个网页的大部分html代码
5.3.2 WebView显示当前页面的url地址
获得WebView当前页面url使用webView.getUrl()即可,如下:
Java代码 [url=][/url]
webView.loadUrl("javascript:window.classNameBeExposedInJs.showHtml('" + webView.getUrl() + "');");
Ⅱ 安卓系统webview 是什么来的
WebView是用于展示网络请求后的结果,也就是将url网络请求的结果展示在里面。
WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核,Android4.4后直接使用了Chrome。
WebView的作用:
1.显示和渲染Web页面;
2.直接使用html文件(网络上或本地assets中)作布局;
3.可和JavaScript交互调用。
(2)android的web应用扩展阅读:
WebView控件功能强大,除了具有一般View的属性和设置外,还可以对url请求、页面加载、渲染、页面交互进行强大的处理。一般来说Webview可单独使用,也可联合其工具类一起使用。
移动应用的主体是WebView,主要以网页语言编写,穿插Native功能的Hybrid App开发类型。激活WebView为活跃状态,能正常执行网页的响应。
当WebView的页面被失去焦点被切换到后台不可见状态,需要执行onPause。通过onPause动作通知内核暂停所有的动作,比如DOM的解析、plugin的执行、JavaScript执行。
参考资料来源:网络—hybrid app
Ⅲ 如何利用安卓手机搭建WEB服务器
1.安装手机本地php+mysql服务器环境篇 :
1.1安装ksweb软件,安装好ksweb后,会在手机上生成一个文件夹htdocs,其目录是mnt/sdcard/htdocs,htdocs是网站的根目录。
1.2安装mysql 直接点击mysql管理,点击选择“是”然后解压便可自动安装。mysql的账号密码随后再改(在设置里面更改)。
1.3安装好MySQL之后,(如下图,打开phpmyadmin,表示安装成功!),另外,我们需要对ksweb进行一些设置方可更好使用。
1.3.1端口的更改步骤:(启用root→更改80端口)手机服务器启用root方法如下图,在ksweb设置里面把root打钩。
1.3.2开启手机80端口方法:把8080端口改为80端口,并把PHP服务,MySQL都打勾。其他一些设置比如MySQL密码,开机自启动等选项大家根据需要自行修改即可!
1.4ksweb全部设置好后,我们打开手机本地服务器地址localhost:80,表示设置好了。
我们点击页面中的“Enter KSWEB Web Interface”可以看到手机服务器的一些配置信息(默认账号密码都是“admin”)。表示手机服务搭建成功,一切正常!
2.利用nat123软件进行内网80端口映射篇:
2.1注册账号,我们先到其官网注册账号官网,大家网络nat123即可,至于怎么注册我就不说了。
2.2登陆并添加域名解析,
2.2.1 应用名称,我填的是网络电视直播—在线看电视。假如你要搭建自己的博客,你可以填XX的博客,或者XX的个人博客等。
2.2.2 内网端口,只有root的手机才填80端口,所以这也是为什么一开始我说手机需要root!
2.2.3 内网地址这个默认localhost就行。
2.2.4 外网域名,我这里使用的是自己的域名(当使用自己的域名时,用cname解析,下面有当前唯一cname地址,我们在自己的域名解析里面填这个就行)。如果我们没有自己的域名,我们可以用官方免费的二级域名,注意他的格式)一切填好之后,点击确认保存即可!
2.3 我们下载并安装登陆安卓版的nat123,就自动解析了,
3.4 接下来我们在另一台电脑上输入刚才的域名访问 如下图所示,表示安卓手机web服务器安装成功,网站搭建成功!
Ⅳ Android系统 WebView是什么有什么用
现在越来越多的APP都内置了Web网页去加载视图,也就是我们常说的Hybrid APP混合应用,市场上很多平台都是这样做的,比如我们经常使用的淘宝、京东等电商平台。这些是如何实现的呢?在我们Android中有一个WebView组件,它就可以实现此类功能。它是Android中的原生UI控件,主要用于在APP应用中方便地访问远程网页或本地HTML资源,同时WebView也在Android中充当Java代码和JS代码之间交互的桥梁,实际上也可以将WebView看做一个功能最小化的浏览器。下面我们一起来看看WebView的一些常用的使用方法。
WebView是Android系统提供的一个能显示网页的系统控件,它是一个特殊的View,同时也是一个ViewGroup,可以有很多其他子View。在Android 4.4以下(不包含4.4)系统WebView底层实现是采用WebKit内核,而在Android 4.4及其以上Google采用了Chromium内核作为系统WebView的底层内核支持。在这一变化中Android提供的WebView相关API并没有发生较大变化,在4.4上也兼容低版本的API并且引进了少部分API。这里简单介绍下基于Chromium的WebView和基于WebKit的WebView之间的差异,基于Chromium的Webview提供了更广的HTML5、CSS3、JavaScript支持,在Android系统版本5.0上基于Chromium 37,WebView提供了绝大多数的HTML5特性支持,除此之外Chromium也支持远程调试(Chrome DevTools)。WebKit JavaScript引起采用WebCore JavaScript在Android 4.4上换成了V8能直接提升JavaScript性能。
二、作用
1、显示和渲染Web页面
2、使用html文件(网络上或本地assets中)作为布局
3、可与JavaScript交互调用
注: WebView控件功能强大,除了具有一般View的属性和设置外,还可以对Url请求、页面加载、渲染、页面交互进行强大的处理。