Android的Webview中,javascript如何调用java方法
PS:另外推荐下面这篇文章《用注解和pojo支撑起来的轻量级REST框架--T2 》
http://blog.csdn.net/nanjingjiangbiao/article/details/7680702
今天调查一个线上Bug,发现是WebView中的一小段javascript,会直接调用到后台APK的一个Java事件,最后导致java中nullpointexception。
感兴趣的是,WebView中的javascript如何调用APK中的java方法。
一个例子:
通过JS取得Android的GPS数据
第一步,WebKit的准备
首先,给与WebKit的javascript的执行许可
然后,塞入自己的javascript拦截器
第二步,定义自己的javascript拦截器
第三步,定义一个可运行的html
在这个代码里面,可以用roid.gps的方法调用第二步定义的java函数
最后,全部的代码
未完
我还想知道为什么,在webview里面定义一个JSObject,就可以连接javascript和后台函数
他们之间是如何通信的?
我稍微调查了一下WebView的底层代码,webview初期化的时候
生成了显示用对象
Transfer all messages to the newly created webcore thread handler. private void [More ...] transferMessages() { mTid = Process.myTid(); mSavedPriority = Process.getThreadPriority(mTid); mHandler = new Handler() { @Override public void [More ...] handleMessage(Message msg) { if (DebugFlags.WEB_VIEW_CORE) { Log.v(LOGTAG, (msg.what < REQUEST_LABEL || msg.what > VALID_NODE_BOUNDS ? Integer.toString(msg.what) : HandlerDebugString[msg.what - REQUEST_LABEL]) + " arg1=" + msg.arg1 + " arg2=" + msg.arg2 + " obj=" + msg.obj); } switch (msg.what) { case WEBKIT_DRAW: webkitDraw();
所以你要问我他们是怎么通信的我只能说是线程间通信。
#以上#