欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android中WebView和javascript实现数据交互实例

程序员文章站 2023-02-02 12:35:20
在看懂这篇文章之前首先要有javascript基础。 (1) js调用android的方法: 复制代码 代码如下:webview wview; wview. addj...

在看懂这篇文章之前首先要有javascript基础。

(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);                       
    }
}