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代码的更多相关文章

  1. ASP.NET 前台Javascript调用后台代码 / 后台调用前台Javascript

    1:ASP.NET 前台Javascript调用后台代码 1.1:前台Javascript <script> function CallCs() { var str = "< ...

  2. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  3. js调用android本地java代码

    js调用android本地java代码 当在Android上使用WebView控件开发一个Web应用时,可以创建一个通过Javascript调用Android端java代码的接口.也就是可以通过Jav ...

  4. JavaScript调用App原生代码(iOS、Android)通用解决方案

    实际场景 场景:现在有一个H5活动页面,上面有一个登陆按钮,要求点击登陆按钮以后,唤出App内部的登录界面,当登录成功以后将用户的手机号返回给H5页面,显示出来.这个场景应该算是比较完整的一次H5中的 ...

  5. 如何实现 javascript “同步”调用 app 代码

    在 App 混合开发中,app 层向 js 层提供接口有两种方式,一种是同步接口,一种一异步接口(不清楚什么是同步的请看这里的讨论).为了保证 web 流畅,大部分时候,我们应该使用异步接口,但是某些 ...

  6. Android中Webview使用javascript调用事先定义好的Java函数

    1. 首先定义好一个类,专们用于给javascript调用 public class JavaScriptInterface { // share your news public void shar ...

  7. PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码

    PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...

  8. ios中javascript直接调用oc代码而非通过改变url回调方式(转)

    之前一个ios项目中,需要通过UIWebview来打开一个静态页面,并在静态页面中 调用相关object-c代码. 一.以前使用js调用object-c的方法 关于如何使用javascript调用ob ...

  9. android 编译调用C代码

    博客地址:www.zalezone.cn 前言 需求来源 这几天帮别人做一个简单的androidclient,也没什么功能,主要就是调用C代码来对手机的Wifi网络进行设置.于是也就引出了技术难点所在 ...

随机推荐

  1. Myeclipse设置自动联想功能

    ///声明,博客园暂无转载功能,这篇博客是转载自贞心真义. 最近初学Java,正在使用MyEclipse来编写新的项目,刚开始打开MyEclipse感觉这个工具既陌生又熟悉,熟悉之处在于编辑器的几大共 ...

  2. iOS几个功能:1.摇一摇;2.震动;3.简单的摇动动画;4.生成二维码图片;5.发送短信;6.播放网络音频等

    有一个开锁的功能,具体的需求就类似于微信的“摇一摇”功能:摇动手机,手机震动,手机上的锁的图片摇动一下,然后发送开锁指令.需求简单,但用到了许多方面的知识. 1.摇一摇 相对这是最简单的功能了. 在v ...

  3. Spring注解大全,汇总版

    Spring使用的注解大全和解释 注解 解释 @Controller 组合注解(组合了@Component注解),应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类 ...

  4. nginx负载均衡之入门配置

    先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况.那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上 ...

  5. ArrayList集合与List与数组的区别

    import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.Lis ...

  6. knova绘制矩形

    效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  7. uml地址栏参数特殊字符处理

    转义方法: function URLencode(sStr) { return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22') ...

  8. docker 暴露2375 端口。

    网上找的.大多不能用...一下是我自己找了半天的方法...,可能是版本太旧的原因 下图解决方法: ubuntu: 18.04 docker: Docker version 18.09.2, build ...

  9. Contest Hunter 1401 兔子与兔子

    1401 兔子与兔子 0x10「基本数据结构」例题 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DN ...

  10. chm 已取消到该网页的导航,打不开!

    方法 11. 双击此 .chm 文件. 2. 在“打开文件安全警告”对话框,单击以清除“打开此文件前始终询问”复选框. 3. 单击“打开”. 方法 21. 右键单击该 CHM 文件,然后单击“属性”. ...