Android与JavaScript相互调用

下面这一节来介绍Android和javascript是怎么相互调用的,这样我们的UI界面设计起来就简单多了,而且UI设计起来也可以跨平台。现在有好多web app前台框架了,比如sencha和jquery mobile等。相信未来随着web app的发展我们同样可以使用html设计出和本地应用一样漂亮的界面。这些虽然很美好,但是现在还有很多弊端,比如比本地框架调用慢的多,因为手机是受限的设备,所以处理起来和反应都是比较慢的,期望未来会有较大的发展。哈哈!

废话不多说,下面来写一个WebViewDemo实现android与javascript相互调用。

先看一下main.xml用了哪些控件:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="@string/hello" />  
  11.     <WebView  
  12.         android:id="@+id/webView"  
  13.         android:layout_width="fill_parent"  
  14.         android:layout_height="wrap_content"  
  15.         />  
  16.     <Button  
  17.         android:id="@+id/button"  
  18.         android:layout_width="fill_parent"  
  19.         android:layout_height="wrap_content"  
  20.         android:text="调用javascript"  
  21.         />  
  22. </LinearLayout>  

然后给出我们的demo.html网页

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  5. <title>Insert title here</title>  
  6. <script type="text/javascript">  
  7.      function show(content){  
  8.          document.getElementById("countent").innerHTML=  
  9.              "这是我的javascript调用. 这是:"+content;  
  10.      }  
  11. </script>  
  12. </head>  
  13. <body>  
  14.   <table align="center">  
  15.      <tr><td>姓名</td><td>电话</td></tr>  
  16.      <tr><td>小明</td><td><a  href="javascript:demo.startPhone(123)">123</a></td></tr>  
  17.      <tr><td>小王</td><td><a  href="javascript:demo.startPhone(456)">456</a></td></tr>  
  18.   </table>  
  19.   <p id="countent">html原始数据</p>  
  20. </body>  
  21. </html>  
最后附上我们的核心代码:
  1. public class WebViewDemoActivity extends Activity {  
  2.   /** Called when the activity is first created. */  
  3.   private WebView webView;  
  4.   private Button button;  
  5.   @Override  
  6.   public void onCreate(Bundle savedInstanceState) {  
  7.       super.onCreate(savedInstanceState);  
  8.       setContentView(R.layout.main);  
  9.         
  10.       webView=(WebView) this.findViewById(R.id.webView);  
  11.       button=(Button) this.findViewById(R.id.button);  
  12.         
  13.       WebSettings setting=webView.getSettings();  
  14.       //设置支持javascript   
  15.       setting.setJavaScriptEnabled(true);  
  16.         //增加接口方法,让html页面调用     
  17.       webView.addJavascriptInterface(new Object(){  
  18.           //这里我定义了一个拨打的方法     
  19.           public void startPhone(String num){  
  20.               Intent intent=new Intent();  
  21.                 
  22.               intent.setAction(Intent.ACTION_CALL);  
  23.               intent.setData(Uri.parse("tel:"+num));  
  24.               startActivity(intent);  
  25.           }  
  26.       }, "demo");  
  27.       //加载页面   
  28.       webView.loadUrl("file:///android_asset/demo.html");  
  29.         
  30.       button.setOnClickListener(new OnClickListener() {  
  31.             
  32.           @Override  
  33.           public void onClick(View v) {  
  34.               // TODO Auto-generated method stub   
  35.               webView.loadUrl("javascript:show('activity传过来的数据')");  
  36.           }  
  37.       });  
  38.   }  
这个项目里用到了拨打电话,所以不要忘记这句代码:
  1. <uses-permission android:name="android.permission.CALL_PHONE"/>  

代码比较简单并附有注释,这里就不做过多解释,下面运行一下项目:

    Android与JavaScript相互调用

     html界面没做美化,所以看起来有点丑,相信美工人员会做的更好,哈哈! 下面我们点击调用javascript按钮:

    Android与JavaScript相互调用

    我们已经看到activity调用javascript方法并传递参数在html界面做了显示,下面我们在点击小明后面的电话号码看又什么反应:

    Android与JavaScript相互调用

      OK! 我们已经通过html调用activity的方法并启动的系统的拨打电话。

相关推荐