在看懂这篇文章之前首先要有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的内容:
  复制代码 代码如下:

 
     
Test page.     


              margin:0px auto;  
            padding:10px;  
            text-align:center;  
            border:2px solid #202020;" > 
               
 
                Click me!  
       
 
     


这里的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);                       
    }
}

更多相关文章

  1. Android源码 更改系统音量
  2. NDK Android* 应用移植方法 APP_ABI := armeabi armeabi-v7a x86
  3. Android代码性能优化技巧 (一)
  4. 关于WebVeiw的例子(一)
  5. Android中Activity生命周期的学习
  6. DSBridge 与 JSBridge 的区别
  7. Android中,如何在其他类调用Activity的方法,适用于类似场景
  8. 【ArcGIS for Android】使用自定义Callout显示地图信息
  9. android studio 查找替换

随机推荐

  1. Android(安卓)WebView中的JavaScript代码
  2. 从componentWillReceiveProps说起
  3. flexbox布局指南
  4. Mybaitis缓存的优化
  5. 分布式系统架构常见面试知识点梳理(每次面
  6. 图解源码 | SpringBoot中自动配置原理
  7. 单例模式你会几种写法?
  8. 一步为你的Springboot应用自定义banner
  9. 工厂模式理解了没有?
  10. 你的Springboot应用到底启动了哪些bean?这