使用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 语 ...