zoukankan      html  css  js  c++  java
  • 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变化。

  • 相关阅读:
    Shell高级编程学习笔记(基础篇)
    基于Python的机器学习实战:Apriori
    基于Python的机器学习实战:AadBoost
    Theano教程:Python的内存管理
    基于theano的降噪自动编码器(Denoising Autoencoders--DA)
    基于theano的深度卷积神经网络
    推荐系统之矩阵分解及C++实现
    推荐系统之协同过滤的原理及C++实现
    一步一步详解ID3和C4.5的C++实现
    Principal components analysis(PCA):主元分析
  • 原文地址:https://www.cnblogs.com/myPersonalTailor/p/3863214.html
Copyright © 2011-2022 走看看