Android和H5的交互

Android端的配置
初始化WebView

    @SuppressLint("JavascriptInterface", "SetJavaScriptEnabled")    private fun initWebView() {        webView.clearCache(true)        webView.clearHistory()        webView.settings.javaScriptEnabled = true //允许使用js        //为服务端提供调用客户端方法的对象,对象名称为android        webView.addJavascriptInterface(this, "android")        webView.webViewClient = webViewClient        webView.webChromeClient = webChromeClient        //不使用缓存,只从网络获取数据        webView.settings.cacheMode = WebSettings.LOAD_NO_CACHE        webView.settings.setSupportZoom(true)        //不显示自带的缩放控件        webView.settings.displayZoomControls = false        webView.settings.builtInZoomControls = true //支持屏幕缩放        loadURL(functionItem!!.item_url)    }
    /**     * 加载网页     */    private fun loadURL(url: String) {        if (Utility.isValidURL(url)) {//判断是否是有效的URL地址            emptyView.show(true)            webView.loadUrl(url)        } else {            emptyView.show("URL地址错误", "")            Logger.t(tag).i("不是有效的URL")        }    }
  //帮助webView处理各种通知,请求事件    private val webViewClient: WebViewClient = object : WebViewClient() {        override fun onPageFinished(view: WebView?, url: String?) {            super.onPageFinished(view, url)            Log.i(tag, "页面加载完成")            emptyView.hide()        }        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {            super.onPageStarted(view, url, favicon)            Log.i(tag, "页面开始加载:$url")            emptyView.show(true)        }        @RequiresApi(Build.VERSION_CODES.M)        override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {            Log.i(tag, "页面加载失败" + error!!.errorCode + error.description)            super.onReceivedError(view, request, error)        }        override fun onReceivedHttpError(view: WebView?, request: WebResourceRequest?, errorResponse: WebResourceResponse?) {            super.onReceivedHttpError(view, request, errorResponse)            //处理HTTP返回的错误            Log.i(tag, "页面加载失败" + errorResponse!!.statusCode)        }        override fun onPageCommitVisible(view: WebView?, url: String?) {            super.onPageCommitVisible(view, url)            Log.i(tag, "页面已经显示")            emptyView.hide()        }    }
    //帮助webView处理与js的交互    private val webChromeClient: WebChromeClient = object : WebChromeClient() {        override fun onReceivedTitle(view: WebView?, title: String?) {            super.onReceivedTitle(view, title)            Log.i(tag, "网页标题$title")            setToolbarTitle(title!!)        }        override fun onProgressChanged(view: WebView?, newProgress: Int) {            super.onProgressChanged(view, newProgress)            Log.i(tag, "进度回调$newProgress")        }    }

供服务端调用的方法

    @JavascriptInterface    fun nextPage(str: String) {        //JS调用Android的方法,这里的方法必须是public型的,否则会调用不到        runOnUiThread {            Logger.t(tag).i("接收到跳转命令")            if (!TextUtils.isEmpty(str)) {                val cls = Class.forName("$packageName.module.view.function.handler.$str")                val intent = Intent(WebPageActivity@ this, cls)                Logger.t(tag).i("跳转页面:" + cls.canonicalName)                startActivity(intent)            }        }    }

服务端的配置

<button id="checkCode">查看示例程序button><script type="text/javascript">    document.getElementById("checkCode").onclick = function () {        window.android.nextPage("HandlerActivity")    }script>

更多相关文章

  1. Android ListView列表 刷新和加载更多
  2. Android getWindow().setFlags方法与SD卡权限
  3. Android页面启动 editext获取焦点 scrollView自动上滑问题
  4. PullToRefreshLayout +RecyclerView 实现上拉加载下拉刷新
  5. 图片加载的几种模式
  6. android 浏览器怎么支持 window.close() 和window.opener.locati
  7. ImageView下载图片加载
  8. Android修改自己程序字体的方法详解
  9. Android 动态加载(三) - 类的加载流程源码分析

随机推荐

  1. 尝尝鲜|Spark 3.1自适应执行计划
  2. 使用Rust编写推箱子游戏基础篇
  3. java实操|mysql数据增量同步到kafka
  4. spark on yarn 内存分配详解
  5. 前端培训班出来的不会写项目怎么办?
  6. find和grep
  7. IP地址分类及网络配置方法和多网卡绑定技
  8. 拨开零售电商数字化转型迷雾,电商RPA应用
  9. Shiro源码分析----认证流程
  10. 前端技术分享:一个超级好用的CSS样式表