- 浏览: 399807 次
文章分类
- 全部博客 (327)
- Android (114)
- Java (13)
- Java基础 (14)
- Glib (2)
- linux (15)
- extjs (5)
- eclipse (2)
- Asterisk (56)
- MYSQL (6)
- 数据库 (9)
- PHP (7)
- C# (18)
- 杂谈~~ (1)
- web开发前端 (3)
- 网络编程 (2)
- Opensips (2)
- voip (3)
- debian (7)
- openfire (15)
- wordpress (1)
- 版本控制 (1)
- Android 线程服务广播 (1)
- SRTP (2)
- 单片机及ARM等 (3)
- 基础知识 (5)
- asp.net (2)
- 单片机 (1)
- 设计模式及架构 (1)
- 安全 (1)
- Cubieboard 草莓树莓各类派 Android开发板 (1)
- J2EE (2)
- BootStrap (3)
- BootStrap web前端开发 (1)
- web前端开发 (4)
- object-c (1)
- openwrt (8)
- 智能家居 (4)
- Node.js (4)
最新评论
-
xiaoxiecomeon:
你这个程序一存在线程的时间片相互抢占的问题,运行时间长了很可能 ...
Runnable 和 Thread -
dotjar:
我觉得话应该这么说:引用TestThread tt = new ...
Runnable 和 Thread -
dagf113225:
调用TelephonyManager的隐藏API是先参考Fra ...
Android提高第十四篇之探秘TelephonyManager
在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。
什么是webkit
WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。 同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且包含了一些来自苹果公司的一些组件。
传统上,WebKit包含一个网页引擎WebCore和一个脚本引擎JavaScriptCore,它们分别对应的是KDE的KHTML和KJS。不过, 随着JavaScript引擎的独立性越来越强,现在WebKit和WebCore已经基本上混用不分(例如Google Chrome和Maxthon 3采用V8引擎,却仍然宣称自己是WebKit内核)。
这里我们初步体验一下在android是使用webview浏览网页,在SDK的Dev Guide中有一个WebView的简单例子 。
在开发过程中应该注意几点:
1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象。
- mWebView.setWebViewClient(new WebViewClient(){
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- view.loadUrl(url);
- return true;
- }
- });
4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
- mWebView.goBack();
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。
看一个实例:
- public class WebViewDemo extends Activity {
- private WebView mWebView;
- private Handler mHandler = new Handler();
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setContentView(R.layout.webviewdemo);
- mWebView = (WebView) findViewById(R.id.webview);
- WebSettings webSettings = mWebView.getSettings();
- webSettings.setJavaScriptEnabled(true);
- mWebView.addJavascriptInterface(new Object() {
- public void clickOnAndroid() {
- mHandler.post(new Runnable() {
- public void run() {
- mWebView.loadUrl("javascript:wave()");
- }
- });
- }
- }, "demo");
- mWebView.loadUrl("file:///android_asset/demo.html");
- }
- }
我们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。
- <html>
- <mce:script language="javascript"><!--
- function wave() {
- document.getElementById("droid").src="android_waving.png";
- }
- // --></mce:script>
- <body>
- <a onClick="window.demo.clickOnAndroid()">
- <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>
- Click me!
- </a>
- </body>
- </html>
这样在javascript中就可以调用java对象的clickOnAndroid()方法了,同样我们可以在此对象中定义很多方法(比 如发短信,调用联系人列表等手机系统功能。),这里wave()方法是java中调用javascript的例子。
这里还有几个知识点:
1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"
2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的。
发表评论
-
直接拿来用!最火的Android开源项目整理
2015-09-16 10:13 579一、代码库 1、from 代码家 整理比较好的源 ... -
探讨android更新UI的几种方法
2014-06-09 23:27 596今天讲的内容非常简单,只是讲讲有关于android界面更新的 ... -
Android 滑动切换页面 以及屏幕手势
2014-05-08 17:49 495手机进入智能机时代,触摸屏也已成为主流之势,原来的手机按键也 ... -
android 用Achartengine 作图
2014-05-08 16:55 725Achartengine 是google的一 ... -
Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
2014-05-08 16:28 731Animation的4个基本动画效果 What is An ... -
java.lang.ClassNotFoundException: Didn't find class "android.support.v4.view.Vie
2014-05-06 14:43 2884Android错误:Caused by: java.lang ... -
Android Socket通信如何设置超时时间
2014-05-06 14:14 1033其实关于这个问题可能用到的人不会很多,不过我在这里还是说说。 ... -
【转】Android本地语音识别引擎PocketSphinx-语言建模
2014-02-13 10:35 1780Android本地语音识别引擎PocketSphinx- ... -
关于build.prop原始Dalvik虚拟机设定与调整
2013-09-05 10:40 1239原厂S3 台版 1GB Ramsystem/build.pro ... -
Android中Service与IntentService的使用比较
2013-09-04 15:24 1169该博客来自网络——— ... -
android 应用程序Activity之间数据传递与共享的几种途径
2013-08-01 17:24 8891.基于消息的通信机制 Intent ---boud ... -
android数据通信方式
2013-08-01 17:15 887http://www.itkee.com/develope ... -
“android.intent.category.DEFAULT”的目的是什么?
2013-07-31 16:43 5211、要弄清楚这个问题,首先需要弄明白什么是implicit( ... -
集成拨号盘,2句话的事情
2013-07-30 15:45 585<intent-filter> < ... -
Android TabHost动态加载内容总结
2013-07-25 17:49 935前面用继承TabActivity的方法很好的完成了,TabHo ... -
[Android实例] android json
2013-07-17 15:20 636import java.io.ByteArrayOutput ... -
android json解析及简单例子
2013-07-17 15:19 908JSON的定义: 一种轻量级的数据交换 ... -
AsyncTask的用法-UI刷新发放
2013-07-15 14:50 646在开发Android应用时必须遵守单线程模型的原则: A ... -
java.lang.OutOfMemoryError处理错误
2013-07-15 14:41 643java.lang.OutOfMemoryError异常解决 ... -
关于android.view.WindowLeaked异常的解决方案
2013-07-15 10:34 594Android.view.WindowLeaked按字面了解, ...
相关推荐
Android x5内核集成demo 解决webview在使用内核时跟h5混合调用时出现的白屏,加载缓慢,...在集成x5内核的时候,首次加载,会出现加载失败的情况,建议初始化放在启动页面来进行 ,初始化完成之后在进入webview相关页面
QT webview浏览器相关开发,简单webview应用开发
可以让你的手机变得瞬间畅通,它会及时优化网页相关数据,有着接入式的操作体验数据,各种类型的应用程序可享受,提高使用感受。本次带来的是安卓最新版,如果你的手机上缺少这个软件,那么就可以来本站下载。 软件...
Android webview相关知识点的代码示例,基于studio的工程,博文地址: http://blog.csdn.net/djstavaV/article/details/49424475
WebKit及WebView相关知识的详细介绍,注意:此文件为思维导图文件,打开需要安装Mind Mananger.
/*webview相关设置*/ mWebView = (WebView)findViewById(R.id.web_view); mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); mWebView.getSettings().setBuiltInZoomControls(true); mWebView....
WebView相关功能测试代码
2021-学习相关-BTAndroidWebViewSelection(webview选择文字).zip
本例子是一个有关android开发中经常用到的webView组件访问页面的例子
在安卓开发过程中,会出现对接H5需要拍照及选择本地图片上传的需求。这个功能的实现需要调用安卓的相关操作,然后将获取到的图片路径传给H5。
WebView实现下拉刷新功能和其他控件下拉刷新功能,博客地址:http://blog.csdn.net/dickyqie/article/details/70170855
android webView+progressBar刷新加载示例.有需要的可以自行下载查看
自定义WebView,自带加载动画.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
webview重载使用.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
webview全屏播放网络视频.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
一个demo,在android4.0中设置网页透明,对网页中哪里透明哪里不透明使用div来控制,对特别是视频相关的背景特别有用。
webView加载网络视频支持全屏播放.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
仿天天动听用WebView实现的引导页面.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
webview支持html5视频播放实例.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android webView和js交互的Demo.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。