一、JS调用Android Java交互
1、WebView初始化及配置:
private void initWebView() {
//配置可与JS交互
wb.getSettings().setJavaScriptEnabled(true);
//配置协议agreement
wb.addJavascriptInterface(new BIDYCAgreetment(context, handler), "agreement");
wb.getSettings().setAllowFileAccess(true);
wb.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wb.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
// 支持缩放 V4.9 add by Able 先注释,可能5.0或许会打开 续:V5.1打开的
wb.getSettings().setBuiltInZoomControls(true);
wb.getSettings().setSupportZoom(true);
// 电脑网页最小化适配手机屏幕 V4.9 add by Able 先注释,可能5.0或许会打开 续:V5.1打开的
wb.getSettings().setUseWideViewPort(true);
wb.getSettings().setLoadWithOverviewMode(true);
WebSettings setting = wb.getSettings();
// 因为zhizao.tudou.com打不开图片-start
setting.setDomStorageEnabled(true);
setting.setAppCacheMaxSize(1024 * 1024 * 8);
setting.setAppCacheEnabled(true);
// 因为zhizao.tudou.com打不开图片-end
setting.setCacheMode(WebSettings.LOAD_NO_CACHE);
setting.setNeedInitialFocus(false);
setting.setSaveFormData(true);
setting.setSavePassword(false);
wb.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//不跳至其他浏览器,在本页面加载url
wb.loadUrl(url);
return true;
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Loading.show(context);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
handler.sendEmptyMessage(MESSAGE_LOAD_SUCCESS);
Loading.dismiss();
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
YoukuLoading.dismiss();
handler.sendEmptyMessage(MESSAGE_TIME_OUT);
}
});
wb.requestFocus();
wb.loadUrl("http://csi.xxxxx.com/mdyc/index.php");
}
2、定义交互协议类:
public class BIDYCAgreetment {
public static final int HIDENAV = 10;
public static final int ActiveNAV1 = 11;
public static final int ActiveNAV2 = 12;
public static final int ActiveNAV3 = 13;
private Context context;
private Handler mHandler;
public BIDYCAgreetment(Context context, Handler handler) {
this.context = context;
this.mHandler = handler;
}
@JavascriptInterface
public void hidenav() {
if (!Util.hasInternet()) {
Util.showTips(R.string.none_network);
return;
}
Logger.d("js-----","----->hidenav");
if (mHandler != null) {
mHandler.sendEmptyMessage(HIDENAV);
}
}
//定义JS交互接口,交互方法activenav(),交互参数nav1,nav2
@JavascriptInterface
public void activenav(final String nav1, final String nav2) {
if (!Util.hasInternet()) {
Util.showTips(R.string.none_network);
return;
}
if (mHandler!=null){
Message msg3 =new Message();
msg3.obj=nav2;
msg3.what=ActiveNAV3;
mHandler.sendMessage(msg3);
Message msg2=new Message();
msg2.obj=nav1;
msg2.what=ActiveNAV2;
mHandler.sendMessage(msg2);
}
}
@JavascriptInterface
public void activenav(final String nav1){
if (!Util.hasInternet()) {
Util.showTips(R.string.none_network);
return;
}
if (mHandler != null) {
Message msg1=new Message();
msg1.obj=nav1;
msg1.what=ActiveNAV1;
mHandler.sendMessage(msg1);
}
}
}
3、Js中的相关定义
<script>
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {//ios
var url = 'agreement::activenav:nav1=4&nav2=3';
sendUrlToNative(url);
}else{//android
window.agreement.activenav(4,3);//Android 定义传递协议、及方法、参数形式
}
</script>
<script>
if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {//ios
var url = 'agreement::activenav:nav1=4&nav2=3';
sendUrlToNative(url);
}else{//android
window.agreement.activenav(4,3);//Android 定义传递协议、及方法、参数形式
}
</script>