Android中Javascript中的调用

参考 张洋:2048-AI程序算法分析,并分析了android版本的源码,觉得android调用javascript代码可以很快复用web代码,提高开发效率,遂对android和javascript相互调用学习并记录。

一、什么是js与android交互?

  通俗一点就是使用js代码调用java代码,或者使用java代码调用js代码。即混合编程。

二、为什么要使用js与java代码交互?

  1.可以做一些js网页做本身处理不了的事情。例如:在网页上调用Android本地打电话,发短信功能、在网页上调用Android手机通讯录、在网页上调用第三方应用、在网页上调用一些Android的本地化处理(操作IO,数据库)等。

  2.可以实现js开发人员与android开发人员合作开发。例如:js开发人员开发js代码供android开发人员调用,android开发人员就不必写js代码,可以专注于andrid开发,用到js的时候直接调用js代码就可以了。(反之亦然)

  3.可以实现网页的动态更新。例如:可以利用js代码调用java的更新数据显示到网页上以达到动态更新网页的目的。

三、Android与JS代码相互调用

1.Android端代码

  

public class MyActivity extends Activity {
    private WebView myWebView;
    private ImageButton ibutton;
    private boolean flag = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        ibutton = (ImageButton)findViewById(R.id.imageButton);
        myWebView = new WebView(this);
        myWebView.getSettings().setJavaScriptEnabled(true);  //使能JavaScript
        myWebView.addJavascriptInterface(this,"Android");  //绑定JavaScript与Android代码
        myWebView.loadUrl("file:///android_asset/index.html");//load web,即JS入口。JS调用android
//        ibutton.setImageDrawable(getResources().getDrawable(R.drawable.eg_bulbon));
    }
    @JavascriptInterface   // 如果target 大于等于API 17,则需要加上如下注解
    public void onJSRun(boolean flag){
       if(flag){
           Log.e("ai~~~~~", "true");
           handler.sendEmptyMessage(1);

       }else{
           Log.e("ai~~~~~~~", "false");
           handler.sendEmptyMessage(2);
       }
    }
    public Handler handler = new Handler(){
        public void handleMessage(Message msg){
            switch (msg.what){
                case 1:
                    Log.e("111111111","isCalled");
                    ibutton.setBackground(getResources().getDrawable(R.drawable.eg_bulbon));
                    try {
                        Thread.currentThread();
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    myWebView.loadUrl("javascript:changeImage(false)");  //Android直接JS函数
                    break;
                case 2:
                    Log.e("2222222222222","isCalled");
                    ibutton.setBackground(getResources().getDrawable(R.drawable.eg_bulboff));
                    try {
                        Thread.currentThread();
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    myWebView.loadUrl("javascript:changeImage(true)");
                    break;
                default:
                    break;
            }
        }
    };
    @JavascriptInterface  // 如果target 大于等于API 17,则需要加上如下注解

    public void debug(String msg) {
        Log.e("ai", msg);
    }

web端代码:

<!DOCTYPE html>
<html>
<body>
<script src="js/ai.js"></script>
<script>
changeImage(true);
</script>

<img id="myimage" onclick="changeImage()" src="img/eg_bulboff.gif">

<p>点击灯泡来点亮或熄灭这盏灯</p>

</body>
</html>

JS代码

function changeImage(flag)
{
Android.debug("the js call is run"); //JS调用Android函数
Android.onJSRun(flag);
}

运行结果:隔300ms,UI变化。

Android中Javascript中的调用

时间: 2024-08-05 22:03:59

Android中Javascript中的调用的相关文章

Android高手进阶教程(二十)之---Android与JavaScript方法相互调用!

在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用android方法,在这里我个人觉得有点和DWR相似. 为了让大家容易理解,我写了一个简单的Demo,具体步骤如下: 第一步:新建一个Android工程,命名为WebViewDemo(这里我在assets里定义了一个html页面). 第二步:修改main.xml布局文件,增加了一个WebView控件还有But

android中引用javascript和在javascript中引用java的简单例子

在android中通过微webView是可以加载javascript代码的,与其说是javascript不如说是加载网页,其实就是html和javascript的结合等,通过html和javascript也可以创建安卓应用,因为android和javascript可以相互调用,下面是我介绍的一个简单的例子,大家可以参考.欢迎和大家一起交流. //允许JavaScript执行 webSettings.setJavaScriptEnabled(true); // 添加一个对象, 让javascrip

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

IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 delegate 方法使我们可以做到让 js 需要调用时,通知 native.在 native 执行完相应调用后,可以用stringByEvaluatingJavaScriptFromString 方法,将执行结果返回给 js.这样,就实现了 js 与 native 代码的相互调用.具体让 js 通知 na

Android中通过WebView控件实现与JavaScript方法相互调用的地图应用

在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用android方法,在这里我个人觉得有点和DWR相似. 为了让大家容易理解,我写了一个简单的Demo,具体步骤如下: 第一步:新建一个Android工程,命名为WebViewDemo(这里我在assets里定义了一个html页面). 第二步:修改main.xml布局文件,增加了一个WebView控件还有But

WebView中Js与Android本地函数的相互调用

介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Android原生函数的相互调用就必不可少了.这里写了一个demo,实现点击html中的图片进行本地展示. 原理 1.Android调用js很简单,直接webView.loadUrl("javascript:JS中的方法名称()");即可. 2.js调用Android方法,需要使用WebView.

(五) Android中WebView跟JavaScript中的交互

在 android 的应用程序中,可以直接调用 WebView 中的 javascript 代码,而 WebView 中的 javascript 代码,也可以去调用 ANDROID 应用程序(也就是 JAVA 部分的代码).下面举例说明之: 1.JAVASCRIPT 脚本调用 android 程序 要在 WebView 中,调用 addJavascriptInterface(OBJ,interfacename)其中,obj 为和 javascript 通信的应用程序,interfacename

Html5 页面中 JavaScript 启动调用的三种方法比较

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 首先,来看一下 Html5 页面引用 JavaScript 代码的几种方式: 1.Html5 页面中使用 <script>  标签容纳

Android中webview跟JAVASCRIPT中的交互

在android的应用程序中,可以直接调用webview中的javascript代码,而webview中的javascript代码,也可以去调用ANDROID应用程序(也就是JAVA部分的代码).下面举例说明之: 1 JAVASCRIPT脚本调用android程序    要在webview中,调用addJavascriptInterface(OBJ,interfacename) 其中,obj为和javascript通信的应用程序,interfacename为提供给JAVASCRIPT调用的 名称

Unity在Android和iOS中如何调用Native API

本文主要是对unity中如何在Android和iOS中调用Native API进行介绍. 首先unity支持在C#中调用C++ dll,这样可以在Android和iOS中提供C++接口在unity中调用.利用这一特性,可以扩展unity的功能.例如集成和调用第三方库.同时为了满足对unity接口的一致性,可以考虑在android和iOS上提供相同的接口供C#调用. 这里列举以下两个例子. 1. 1. 以弹出一个覆盖部分屏幕的webview为例来说明如何从C#调用Native接口. 2. 2. 简