转载地址:http://www.jb51.net/article/77206.htm

这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行JavaScript及JavaScript访问Android的技巧,需要的朋友可以参考下:

本文实例讲述了Android和JavaScript相互调用的方法。分享给大家供大家参考,具体如下:

Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中,软件一打开就会访问网络获取到最新的界面。缺点是会受到网络信号的影响,从而导致访问速度慢。

1.用WebView来显示HTML代码

2.允许WebView执行JavaScript

  1. webView.getSettings().setJavaScriptEnabled(true);

3.获取到HTML文件,也可从网络中获取

  1. webView.loadUrl("file:///android_asset/index.html"); //HTML文件存放在assets文件夹中

4.添加一个对象, 让JS可以访问该对象的方法, 该对象中也可以调用JS中的方法

  1. webView.addJavascriptInterface(new Contact(), "contact");

完整示例代码如下:

效果图:

MainActivity:

  1. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.net.Uri;
  4. import android.os.Bundle;
  5. import android.webkit.WebView;
  6. public class MainActivity extends Activity {
  7. private WebView webView;
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.main);
  11. //加载页面
  12. webView = (WebView) findViewById(R.id.webView);
  13. //允许JavaScript执行
  14. webView.getSettings().setJavaScriptEnabled(true);
  15. //找到Html文件,也可以用网络上的文件
  16. webView.loadUrl("file:///android_asset/index.html");
  17. // 添加一个对象, 让JS可以访问该对象的方法, 该对象中可以调用JS中的方法
  18. webView.addJavascriptInterface(new Contact(), "contact");
  19. }
  20. private final class Contact {
  21. //JavaScript调用此方法拨打电话
  22. public void call(String phone) {
  23. startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone)));
  24. }
  25. //Html调用此方法传递数据
  26. public void showcontacts() {
  27. String json = "[{\"name\":\"zxx\", \"amount\":\"9999999\", \"phone\":\"18600012345\"}]";
  28. // 调用JS中的方法
  29. webView.loadUrl("javascript:show('" + json + "')");
  30. }
  31. }
  32. }

HTML:

  1. "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6. <title>Insert title here</title>
  7. <script type="text/javascript">
  8. function show(jsondata){
  9. var jsonobjs = eval(jsondata);
  10. var table = document.getElementById("personTable");
  11. for(var y=0; y<jsonobjs.length; y++){
  12. var tr = table.insertRow(table.rows.length);
  13. var td1 = tr.insertCell(0);
  14. var td2 = tr.insertCell(1);
  15. td2.align = "center";
  16. var td3 = tr.insertCell(2);
  17. td3.align = "center";
  18. td1.innerHTML = jsonobjs[y].name;
  19. td2.innerHTML = jsonobjs[y].amount;
  20. td3.innerHTML = "<a href='javascript:contact.call(\""+ jsonobjs[y].phone+ "\")'>"+ jsonobjs[y].phone+ "</a>";
  21. }
  22. }
  23. </script>
  24. </head>
  25. <body onload="javascript:contact.showcontacts()">
  26. <table border="0" width="100%" id="personTable" cellspacing="0">
  27. <tr>
  28. <td width="30%">姓名</td>
  29. <td width="30%" align="center">存款</td>
  30. <td align="center">电话</td>
  31. </tr>
  32. </table>

拨打电话需要添加权限:

  1. <uses-permission android:name="android.permission.CALL_PHONE" />

希望本文所述对大家Android程序设计有所帮助。

Android和JavaScript相互调用的方法的更多相关文章

  1. android与javascript相互调用

    下面这一节来介绍android和javascript是怎么相互调用的,这样我们的UI界面设计起来就简单多了,而且UI设计起来也可以跨平台.现在有好多web app前台框架了,比如sencha和jque ...

  2. Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式

    IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...

  3. Android Webview 和Javascript交互,实现Android和JavaScript相互调用

    在Android的开发过程中.遇到一个新需求.那就是让Java代码和Javascript代码进行交互.在IOS中实现起来很麻烦.而在Android中相对来说容易多了.Android对这种交互进行了很好 ...

  4. IOS Object和javaScript相互调用

    在IOS开发中有时会用到Object和javaScript相互调用,详细过程例如以下: 1. Object中运行javascript代码,这个比較简单,苹果提供了非常好的方法 - (NSString ...

  5. 开源项目ScriptGate,Delphi与JavaScript相互调用的神器

    ScriptGate是一个实现TWebBrowser上的JavaScript和Delphi代码相互调用的库,具体在这里:https://bitbucket.org/freeonterminate/sc ...

  6. (转)Android和JavaScript互相调用

    Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中,软件一打开就会访问网络获取到最新的界面.缺点是会受到网络信号的影响,从而导致访问速度慢. 1.用WebV ...

  7. asp.net javascript客户端调用服务器端方法

    如何用js调用服务器端方法.首先服务器端方法的格式如下 [System.Web.Services.WebMethod]        public static void serverMethod(s ...

  8. UIWebView与JavaScript相互调用

    UIWebView与JavaScript的那些事儿 UIWebView是IOS SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页然后显示想显示的内容.其中就要用到javascript的知 ...

  9. Android JNI中C调用Java方法

    背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT v ...

随机推荐

  1. 图片访问实时处理的实现(nodejs和php)

    我在访问时光网.网易云音乐等网站时,发现将它们页面中的一些图片URL修改一下就可以得到不同尺寸的图片,于是思考了其实现方案,我的思路是:URL Rewrite + 实时处理 + 缓存,对用户请求的UR ...

  2. 在Linux虚拟机下配置tomcat

    1.到Apache官网下载tomcat http://tomcat.apache.org/download-80.cgi 博主我下载的是tomcat8 博主的jdk是1.8 如果你们的jdk是1.7或 ...

  3. Ubuntu 16.10 安装byzanz截取动态效果图工具

    1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...

  4. LeetCode[5] 最长的回文子串

    题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  5. Mysql命令大全

    格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输 ...

  6. Collection集合

    一些关于集合内部算法可以查阅这篇文章<容器类总结>. (Abstract+) Collection 子类:List,Queue,Set 增: add(E):boolean addAll(C ...

  7. PHP设计模式(七)适配器模式(Adapter For PHP)

    适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 如下图(借图): // 设置书的接口 // 书接口 interface BookI ...

  8. NodeJS使用mysql

    1.环境准备 手动添加数据库依赖: 在package.json的dependencies中新增, "mysql" : "latest", { "nam ...

  9. C#编写windows服务,多服务为什么只启动一个(ServiceBase.Run)

    https://zhidao.baidu.com/question/380395667.html //多服务一个宿主程序时必须注间以下要点: Service1的ServiceName 必须 Insta ...

  10. useful commands for Kubernetes beginners

    Get pod ip and their coordinating NODE $ kubectl get pods -o wide If you want to get detailed inform ...