使用javascript调用android代码
1.使用webview对象的addJavascriptInterface方法
2.addJavascriptInterface方法有两个参数,第一个参数就是我们一般会实现一个自己的类,类里面提供我们要提供给javascript访问的方法;第二个参数是访问我们在obj中声明的方法时候所用到的js对象,调用模式为window.interfaceName.方法名()或者是javascript: interfaceName.方法名() ;,如myWebView.addJavascriptInterface(new JavaScriptinterface(this), "android");
3.编写JavaScriptinterface类,如有一个函数名为showToast()的方法
4.在html中调用时的形式:javascript:android.showToast()。
JavaScriptinterface.java
 1 import android.content.Context;
 2     import android.widget.Toast;
 3     public class JavaScriptinterface {
 4         private Context mContext;
 5         /** Instantiate the interface and set the context */
 6         public JavaScriptinterface(Context c) {
 7             mContext = c;
 8         }
 9         /** Show a toast from the web page */
10         public void showToast(String toast) {
11             Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
12         }
13     }MainActivity.java
 1 import java.io.BufferedReader;
 2 import java.io.File;
 3 import java.io.InputStreamReader;
 4 import android.app.Activity;
 5 import android.content.Context;
 6 import android.os.Bundle;
 7 import android.view.KeyEvent;
 8 import android.webkit.WebView;
 9 import android.webkit.WebViewClient;
10
11 public class MainActivity extends Activity {
12     /** Called when the activity is first created. */
13     private WebView myWebView;
14
15     @Override
16     public void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.main);
19         myWebView = (WebView) findViewById(R.id.myWebView);
20         myWebView.getSettings().setJavaScriptEnabled(true);
21         myWebView.addJavascriptInterface(new JavaScriptinterface(this),
22                 "android");
23         String htmlText = getFromAssets("test.html");
24         //把myWebView加载html
25         myWebView.loadData(htmlText, "text/html", "utf-8");
26         myWebView.setWebViewClient(new myWebViewClient());
27
28     }
29     // 此按键监听的是返回键,能够返回到上一个网页(通过网页的hostlistery)
30     public boolean onKeyDown(int keyCode, KeyEvent event) {
31         if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
32             myWebView.goBack();
33             return true;
34         }
35         return super.onKeyDown(keyCode, event);
36     }
37     public String getFromAssets(String fileName) {
38         try {
39             InputStreamReader inputReader = new InputStreamReader(
40                     getResources().getAssets().open(fileName));
41             BufferedReader bufReader = new BufferedReader(inputReader);
42             String line = "";
43             String Result = "";
44             while ((line = bufReader.readLine()) != null)
45                 Result += line;
46             if (bufReader != null)
47                 bufReader.close();
48             if (inputReader != null)
49                 inputReader.close();
50             return Result;
51         } catch (Exception e) {
52             e.printStackTrace();
53         }
54         return null;
55     }
56     class myWebViewClient extends WebViewClient {
57         @Override
58         public boolean shouldOverrideUrlLoading(WebView view, String url){
59             view.loadUrl(url);
60             return true;
61         }
62     }
63 }test.html
 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN" dir="ltr">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 5
 6 <script type="text/javascript">
 7 function showAndroidToast(toast) {
 8     javascript:android.showToast(toast);
 9      }
10 </script>
11
12 </head>
13 <body>
14 <input type="button" value="Say hello"
15     onClick="showAndroidToast('Hello Android!')" />
16 </body>
17 </html>MainActivity02.java
 1 import java.io.BufferedReader;
 2 import java.io.File;
 3 import java.io.InputStreamReader;
 4 import android.app.Activity;
 5 import android.content.Context;
 6 import android.content.Intent;
 7 import android.net.Uri;
 8 import android.os.Bundle;
 9 import android.os.Handler;
10 import android.view.KeyEvent;
11 import android.view.View;
12 import android.view.View.OnClickListener;
13 import android.webkit.WebSettings;
14 import android.webkit.WebView;
15 import android.webkit.WebViewClient;
16 import android.widget.Button;
17
18 public class MainActivity02 extends Activity {
19     /** Called when the activity is first created. */
20     private WebView webView;
21       private Button button;
22       @Override
23       public void onCreate(Bundle savedInstanceState) {
24           super.onCreate(savedInstanceState);
25           setContentView(R.layout.main2);
26
27           webView=(WebView) this.findViewById(R.id.webView);
28           button=(Button) this.findViewById(R.id.button);
29
30           WebSettings setting=webView.getSettings();
31           //设置支持javascript
32           setting.setJavaScriptEnabled(true);
33             //增加接口方法,让html页面调用
34           webView.addJavascriptInterface(new Object(){
35               //这里我定义了一个拨打的方法
36               public void startPhone(String num){
37                   Intent intent=new Intent();
38
39                   intent.setAction(Intent.ACTION_CALL);
40                   intent.setData(Uri.parse("tel:"+num));
41                   startActivity(intent);
42               }
43           }, "demo");
44           //加载页面
45           webView.loadUrl("file:///android_asset/test2.html");
46
47           button.setOnClickListener(new OnClickListener() {
48
49               @Override
50               public void onClick(View v) {
51                   // TODO Auto-generated method stub
52                   webView.loadUrl("javascript:show('activity传过来的数据')"); //调用javascript函数
53                   /*
54                   * 通过webView.loadUrl("javascript:xxx")方式就可以调用当前网页中的名称
55                   * 为xxx的javascript方法
56                   */
57               }
58           });
59 }}test2.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>原文链接:http://www.cnblogs.com/lee0oo0/archive/2012/08/01/2617953.html
使用javascript调用android代码的更多相关文章
- ASP.NET 前台Javascript调用后台代码 / 后台调用前台Javascript
		1:ASP.NET 前台Javascript调用后台代码 1.1:前台Javascript <script> function CallCs() { var str = "< ... 
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
		概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ... 
- js调用android本地java代码
		js调用android本地java代码 当在Android上使用WebView控件开发一个Web应用时,可以创建一个通过Javascript调用Android端java代码的接口.也就是可以通过Jav ... 
- JavaScript调用App原生代码(iOS、Android)通用解决方案
		实际场景 场景:现在有一个H5活动页面,上面有一个登陆按钮,要求点击登陆按钮以后,唤出App内部的登录界面,当登录成功以后将用户的手机号返回给H5页面,显示出来.这个场景应该算是比较完整的一次H5中的 ... 
- 如何实现 javascript “同步”调用 app 代码
		在 App 混合开发中,app 层向 js 层提供接口有两种方式,一种是同步接口,一种一异步接口(不清楚什么是同步的请看这里的讨论).为了保证 web 流畅,大部分时候,我们应该使用异步接口,但是某些 ... 
- Android中Webview使用javascript调用事先定义好的Java函数
		1. 首先定义好一个类,专们用于给javascript调用 public class JavaScriptInterface { // share your news public void shar ... 
- PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码
		PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ... 
- ios中javascript直接调用oc代码而非通过改变url回调方式(转)
		之前一个ios项目中,需要通过UIWebview来打开一个静态页面,并在静态页面中 调用相关object-c代码. 一.以前使用js调用object-c的方法 关于如何使用javascript调用ob ... 
- android 编译调用C代码
		博客地址:www.zalezone.cn 前言 需求来源 这几天帮别人做一个简单的androidclient,也没什么功能,主要就是调用C代码来对手机的Wifi网络进行设置.于是也就引出了技术难点所在 ... 
随机推荐
- 利用python 学习数据分析  (学习一)
			内容学习自: Python for Data Analysis, 2nd Edition 就是这本 纯英文学的很累,对不对取决于百度翻译了 前情提要: 各种方法贴: https://w ... 
- OKR 第一阶段
			性能优化,主要是为了提高用户体验. 1. 根据浏览器的工作原理,dom树解析时,遇到css 以及js 会出现阻塞,为了缩短dom树解析时间,进行了js 增加 async 的异步加载过程 . 原有代 ... 
- jQuery EasyUI Datagrid组件的完整的基础DOM结构
			标题可能有点长,什么叫“完整的基础DOM结构”,这里“基础”的意思是指这个结构不依赖具体数据,不依赖Datagrid的view属性,只要存在Datagrid实例就会存在这样的基础DOM结构:而“完整” ... 
- C# openfiledialog的使用
			文件对话框(FileDialog) 一.打开文件对话框(OpenFileDialog) 1. OpenFileDialog控件有以下基本属性 InitialDirectory 对话框的初始目录Filt ... 
- OpenERP __sql_constrants  doesn't work.
			可能的原因有两个,一个是你没有更新模块列表,第二个可能是你原有的列已经有重复的数据.(unique限制为例.) 
- Mac下使用Eclipse的Show in Terminal提示command not found: mvn
			在Mac下一般配置了Maven的环境变了一般都不会提示,但是如果使用zsh的扩展之后,系统默认的环境变量配置文件会发生变化,尤其使用Eclipse打开终端时,默认不会去读取用户目录下的~/.bashr ... 
- 成倍提高服务器的负载能力:浅谈Jexus的ASP.NET前置缓存技术
			一.什么是“ASP.NET前置缓存” ASP.NET前置缓存,是Jexus特色功能之一,是指Jexus把开发者指定的ASP.NET网页某一时刻的内容,缓存到专用的高速缓冲区中,在指定的时间内, ... 
- mono上部署web程序初体验
			早就想体验一下mono,但一直琐事缠身.难得有时间,便在网上一通狂搜mono相关的资料. 如果想使用Apache服务器,只能使用mod_mono的方式,这里有详细的介绍.这种方式有点繁琐,需要安装一大 ... 
- WPF设置动画在控件载入时就立刻执行
			<YourControl.Triggers> <EventTrigger RoutedEvent="YourControl.Loaded"><!--这 ... 
- 《Think Python》第7章学习笔记
			目录 7.1 重新赋值(Reassignment) 7.2 更新变量(Updating variables) 7.3 while 语句(The while statement) 7.4 break 语 ... 
