webapp套用android的webview的壳子.怎么做数据交互

 我来答
huanglenzhi
2015-06-05 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517174
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  (1) js调用android的方法:
WebView wView;
wView. addJavascriptInterface (Object obj, String interfaceName);
是实例化一个对象,在html的js中调用,第二个参数是实例化对象的别名,如果要使用这个obj,则在js中使用的名字
  就是interfaceName。
  public class jsWebDemo extends Activity {
  WebView wView;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  wView = (WebView)findViewById(R.id.wv1);
  
  WebSettings wSet = wView.getSettings();
  wSet.setJavaScriptEnabled(true);

  ProxyBridge pBridge = new ProxyBridge();
  wView.addJavascriptInterface(pBridge, "AliansBridge");
  
  wView.loadUrl("file:///android_asset/index.html");
  
  }
  
  private class ProxyBridge {
  public int one () {
  return 1;
  }
  }
  
  }

  来看一下index.html的内容:
  <html>
  <mce:script language="javascript"><!--
  
  /* This function is invoked by the activity */
  function wave() {
  alert("1");
  document.getElementById("droid").src="android_waving.png";
  alert("2");
  }
  
  // --></mce:script>
  <body>
  <div id="output">Test page.</div>

  <a onClick="window.demo.clickOnAndroid()">
  <div style="width:100px;
  margin:0px auto;
  padding:10px;
  text-align:center;
  border:2px solid #202020;" >
  <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>
  Click me!
  </div>
  </a>
  <input type="submit" value="change to 1" onclick="document.getElementById('output').innerHTML

  =AliansBridge.one()" />
  </body>
  </html>
  这里的AliansBridge即是调用的JAVA对象。
  要注意的是,如果你只有一个方法需要被js调用只new一个对象就行:
  ProxyBridge pBridge = new ProxyBridge();
wView.addJavascriptInterface(pBridge, "AliansBridge");
  如果你需要调用好多个方法,就要把整个android程序所在的类本身实例化传递进去:
  wView.addJavascriptInterface(this, "AliansBridge");
  (2) android调用js的方法:wView.setWebChromeClient (WebChromeClient client)
要用到Handler更新UI,Handler mHandler = new Handler();
  mWebView.setWebChromeClient(new MyWebChromeClient());
  mWebView.addJavascriptInterface(new Object(){
  /**
  * This is not called on the UI thread. Post a runnable to invoke
  * loadUrl on the UI thread.
  */
  public void clickOnAndroid() {
  
  mHandler.post(new Runnable() {
  public void run() {
  mWebView.loadUrl("javascript:wave()");
  }
  });
  }
  }, "demo");

  同理,在html中必须有一个名为demo的对象调用clickOnAndroid()方法。

  /**
  * Provides a hook for calling "alert" from javascript. Useful for
  * debugging your javascript.
  */
  final class MyWebChromeClient extends WebChromeClient {
  @Override
  public boolean onJsAlert(WebView view, String url, String message,
  JsResult result) {
  result.confirm();
  return super.onJsAlert(view, url, message, result);
  }
  }
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式