Android之jsToJava和javaTojs--webView篇详解

15 篇文章 1 订阅

导言:

     最近在Android设备做一套软件,软件是服务于银行产业,我们负责终端主框架,终端静态页面以及服务端的开发等,本篇文章主要根据此项目介绍开发Android项目的jsToJava和javaTojs以及webViewMain的配置。

   在开发之前,大家需要考虑两个问题,首先安卓项目需要什么框架来做?如何实现主框架和终端页面分离的跨平台js与java的交互?

   回答:安卓项目这里采用webView框架来实现核心架构,使用html实现安卓需要的页面。具体流程如下:

首先在Android项目中的MActivity主类中实现核心架构的配置,比如客户端的缓存设置,系统参数的配置以及webview的配置;

webView配置如下:

 /**
     * webViewMain相关设置
     */
    private void webViewMainSettings() {
        XWalkSettings xWalkSettings = webViewMain.getSettings();

        //webViewMain.getSettings().setDefaultTextEncodingName("utf-8");
        xWalkSettings.setJavaScriptEnabled(true);//支持js
        xWalkSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过JS打开新窗口
        //xWalkSettings.setUseWideViewPort(true);//将图片调整到合适webview的大小
        //xWalkSettings.setLoadWithOverviewMode(true);//缩放至屏幕的大小
        xWalkSettings.setLoadsImagesAutomatically(true);//支持自动加载图片
        xWalkSettings.setSupportMultipleWindows(true);//支持多窗口
        xWalkSettings.setSupportZoom(false);//支持缩放
        xWalkSettings.setAllowFileAccess(true);
        xWalkSettings.setAllowContentAccess(true);
        xWalkSettings.setDomStorageEnabled(true);//开启DOM storage API功能
        xWalkSettings.setDatabaseEnabled(true);
        xWalkSettings.setBlockNetworkImage(true);//网络图阻塞策略,true-阻塞图片不加载,false-不阻塞-正常加载图片。一般先阻塞,在页面加载完成(onPageFinished)后取消阻塞

        //允许webview对文件的操作
        xWalkSettings.setAllowFileAccessFromFileURLs(true);
        xWalkSettings.setAllowUniversalAccessFromFileURLs(true);

        /*
            LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据。
            LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
            LOAD_CACHE_NORMAL: API level 17中已经废弃,从API level 11开始作用同LOAD_DEFAULT模式
            LOAD_NO_CACHE: 不使用缓存,只从网络获取数据。
            LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。本地没有缓存时才从网络上获取。
        */
        xWalkSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//缓存策略
        webViewMain.loadUrl("file:///android_asset/www/index.html");
        webViewMain.addJavascriptInterface(new Deliver(MActivity.this), "js2Android");
        webViewMain.setLayerType(View.LAYER_TYPE_SOFTWARE, null);//LAYER_TYPE_LAYER_TYPE_SOFTWARE


        //屏蔽掉长按事件,防止弹出安卓原生的复制提示
        webViewMain.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                return true;
            }
        });
        webViewMain.requestFocus();
       
}

通过XWalkSettings进行对webView的基础配置,其中

webViewMain.addJavascriptInterface(new Deliver(MActivity.this), "js2Android");

备注:Deliver.java为终端js跨平台调用主框架的java方法的实现类,js2Android为终端js调用此类的别名

终端js调用案例:

 /*异步ajax发送通用方法*/
    base.ajaxBase = function (className, methodName, paramArr, success, businessType) {        
js2Android.jsaaa(className, methodName, jsonText, businessType, jsInvokerBridgeCallback);
        }

Deliver.java案例:

@SuppressWarnings("AliControlFlowStatementWithoutBraces")
public class Deliver {
    private Context mContxt;
    private Map<Integer, String> mapAppPort = new HashMap<>();
    private SpeechSynthesizer mTts = null;

    public Deliver(Context mContxt) {
        this.mContxt = mContxt;
    }


    public Deliver() {
    }
 /***
     * @JavascriptInterface跨平台调用注解
     */
    @JavascriptInterface
    public void jsaaa() {
       Logger.info(false, "platform", "jsName:" + jsName);

    }

}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值