使用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网络进行设置.于是也就引出了技术难点所在 ...
随机推荐
- C#常用总结《一》
集合类常用: List<T> 泛型集合 Dictionary<key,value> 字典集合 文件读取: FileStream :对各种文件读写,字节处理更好 StreamR ...
- C#以管理员权限运行源码,C#软件获取管理员权限,c#获取管理员权限
C#以管理员权限运行源码,C#软件获取管理员权限,c#获取管理员权限 发布时间:2014-10-19 21:40内容来源:未知 点击: 次 windows 7和vista提高的系统的安全性,同时需要明 ...
- div实现高度自适应的textarea
textarea使我们常常使用的一种表单形式,多用于大段文字的输入,大多数情况下,textarea都是可以满足需求的,但是当我们希望这个输入框高度自适应的时候,textarea就很难做到了. ok,主 ...
- auguements实参对象的数组化
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringBoot 整合 Logback
Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.L ...
- 关于chrome浏览器事件拖动的bug(首次点击的时候也触发move的事件)
在做R80web的时候出现一个奇怪的现象,chorme现在的版本还是存在,拖动事件有mousedown.mousemove.mouseup组成,但是首次click以及失去焦点再重新点击的时候同样会触发 ...
- Js 中的false,零值,null,undefined和空字符串对象
转自 http://www.imkevinyang.com/2009/07/javascript-中的false零值nullundefined和空字符串对象.html 在Javascript中,我们 ...
- 如何调用npm已经安装在全局位置的模块
参考链接 https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders npm install xxx -g ...
- MySQL数据库以及其Python用法
一 命令行模式下: mysql -u root -p # 进入进入mysql命令行模式 show databases; # 查看所有数据库 create database data; # 创建数据库, ...
- java突破------一撸到底(做Java开发,遇到瓶颈是保持现状还是寻求突破?)
java突破------一撸到底(做Java开发,遇到瓶颈是保持现状还是寻求突破?) 很多人做Java开发2.3年之后,都会觉得自己遇到了瓶颈.什么都会又什么都不会,如何改变困境,为什么很多人写了7. ...