Android与js交互,带进度条的加载H5页面

    private void initWebView() {
        WebSettings settings = wvResumeDetail.getSettings();
        //支持JavaScript脚本语言
        settings.setJavaScriptEnabled(true);
        //允许WebView访问文件数据
        settings.setAllowFileAccess(true);
        // 支持内容缩放控制
        settings.setBuiltInZoomControls(false);
        //编码格式
        settings.setDefaultTextEncodingName("UTF-8");
        //设置自适应屏幕
        settings.setUseWideViewPort(true);
        settings.setLoadWithOverviewMode(true);
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        //设置可以使用
        settings.setDomStorageEnabled(true);
        //应用可以有数据库
        settings.setDatabaseEnabled(false);
        //应用可以有缓存
        settings.setAppCacheEnabled(false);

        wvResumeDetail.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK && wvResumeDetail.canGoBack()) {
                    wvResumeDetail.goBack();
                    return true;
                }
                return false;
            }
        });
        wvResumeDetail.setWebViewClient(new WebViewClient() {

            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String failingUrl) {
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.contains("tel:")) {
                    String mobile = url.substring(url.lastIndexOf("/") + 1);
                    CommonUtil.call(context, mobile.substring(4, mobile.length()));
                    //这个超连接,java已经处理了,webview不要处理了
                    return true;
                } else if (url.contains("mailto:")) {
                    CallUtil.mail(context, url);
                } else {
                    view.loadUrl(url);
                }
                return true;
            }
        });
        wvResumeDetail.setWebChromeClient(new WebChromeClient() {

            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                //有的手机不走此方法,故在onPageFinished中也添加了设置
            }

            /** 加载数据的进度变化 */
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                if (pbResumeDetail != null) {
                    if (newProgress != 100) {
                        pbResumeDetail.setVisibility(View.VISIBLE);
                    }
                    pbResumeDetail.setProgress(newProgress);

                    if (pbResumeDetail.getProgress() == 100) {
                        final Timer timer = new Timer();
                        TimerTask task = new TimerTask() {
                            public void run() {
                                Message message = new Message();
                                message.what = 1;
                                progressHandler.sendMessage(message);
                                timer.cancel();
                            }
                        };
                        timer.schedule(task, 500);
                    }
                }

                super.onProgressChanged(view, newProgress);
            }

            /** 处理HTML的对话框 */
            @Override
            public boolean onJsConfirm(WebView view, String url,
                                       String message, final JsResult result) {
                showDialog(message, result);
                return true;
            }

        });
//Android与Js的交互,js程序员会通过AndroidWebView标识返回事件
        wvResumeDetail.loadUrl(url);
        wvResumeDetail.addJavascriptInterface(new JavaScriptInterface(this), "AndroidWebView");

    }

    public class JavaScriptInterface {
        Context mContext;

        JavaScriptInterface(Context c) {
            mContext = c;
        }

        @JavascriptInterface
        public void setShareData(String data) {
            Evaluate evaluate = JsonUtil.fromJson(data, Evaluate.class);
            if (evaluate != null) {
                js2evaluate = evaluate;
            }
        }
    }

    private Handler progressHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int msgId = msg.what;
            if (msgId == 1) {
                if (pbResumeDetail != null) {
                    pbResumeDetail.setVisibility(View.GONE);
                }
            }
        }
    };

    private void showDialog(String msg, final JsResult result) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setMessage(msg);
        builder.setTitle("提示");
        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                result.confirm();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                result.cancel();
            }
        });
        builder.create().show();
    }

    public static void startAction(Context context, String id) {
        Intent intent = new Intent(context, SuccessCaseDetailActivity.class);
        intent.putExtra("id", id);
        context.startActivity(intent);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值