热门栏目:  公务员继续教育  专业技术人员继续教育  工勤人员继续教育  路之遥博客

您的位置:首页>路之遥博客>安卓开发

安卓与HTML5的互相调用

2015-12-09 09:53 浏览: 1 字体:〖

摘要: 安卓与HTML5的互相调用...

本次项目是混合式的开发项目,需要原生的代码与HTML5的代码同时存在,在研发的过程中,遇到原生ACTIVITY与HTML5代码交互的问题。

 

主要问题为三个方面

1,ACTIVITY获取到参数等值,传给html5

2,HTML5能够通过JS,调用ACTIVITY当中调用的方法

3,ACTIVITY能够调用到H5方法传来的参数,然后做出相应的解析判断

 

第一部分:ACTIVITY传值给HTML5

首先定义内部类

    class PayInfoObj{

        private Context con;

        public PayInfoObj(Context con){

            this.con = con;

        }

 

        String userId;

        String personId;

        String realName;

 

        @JavascriptInterface

        public  String getUserId() {

            return userId;

        }

 

        @JavascriptInterface

        public void setUserId(String userId) {

            this.userId = userId;

        }

        @JavascriptInterface

        public String getPersonId() {

            return personId;

        }

        @JavascriptInterface

        public void setPersonId(String personId) {

            this.personId = personId;

        }

        @JavascriptInterface

        public String getRealName() {

            return realName;

        }

        @JavascriptInterface

        public void setRealName(String realName) {

            this.realName = realName;

        }

    }

 

其次实现该类以及给予HTML5调用

PayInfoObj jsObj = new PayInfoObj(CourseOrderInfoActivity.this);

jsObj.setUserId(DemoApplication.getInstance().getUserId());

        jsObj.setRealName(DemoApplication.getInstance().getUserName());

        jsObj.setPersonId(DemoApplication.getInstance().getPersonId());

 

        webview.addJavascriptInterface(jsObj, "parameterInfo");

这里边,parameterInfo就是在HTML5当中需要引用的参数。

 

最后,在HTML5当中进行引用

alert(parameterInfo.getUserId());

alert(parameterInfo.getPersonId());

alert(parameterInfo.getRealName());

 

第二部分,HTML5通过方法来调用ACTIVITY的方法

首先定义接口类

import android.webkit.JavascriptInterface;

 

public class JsInterface {

    public interface wvClientClickListener {

        public void wvHasClickEnvent(String obj);   //传入一个参数

    }

 

    private wvClientClickListener wvEnventPro = null;

 

    public void setWvClientClickListener(wvClientClickListener listener) {

        wvEnventPro = listener;

    }

 

    public void javaFunction(String type,String obj) {

        if(type.trim().equals("1")){    //1表示被执行

            if (wvEnventPro != null){

                wvEnventPro.wvHasClickEnvent(obj);

            }

        }

 

    }

}

其次在ACTIVITY中定义内部类实现之
    class webviewClient extends WebViewClient {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            jSInterface2.setWvClientClickListener(new webviewClick());// 这里就是js调用java端的具体实现
        }
 
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
 
    class webviewClick implements JsInterface.wvClientClickListener {
        @Override
        @JavascriptInterface
        public void wvHasClickEnvent(String obj) {
            new UserDefinedDialog(CourseOrderInfoActivity.this, obj, null, null).show();
            Intent intent=new Intent();
//            其他逻辑
        }
 
    }
 
    然后在ACTIVITY中进行注册
webview.setWebViewClient(new webviewClient());
WebSettings settings = webview.getSettings();
 webview.addJavascriptInterface(jSInterface2,"jSInterface2");
   
 

你可能也喜欢:

最近更新

路之遥继续教育网,扫描加好友

技术支持:常州路之遥软件有限公司 版权所有
备案号:苏ICP备09092440号