导言:
最近在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);
}
}