美文网首页
Kotlin与H5通信方式(h5调用kt kt调用h5 cal

Kotlin与H5通信方式(h5调用kt kt调用h5 cal

作者: JaosnZhao | 来源:发表于2019-08-09 15:11 被阅读0次

    一 : 主类

    class MainActivity : AppCompatActivity() {

    /**

        * 懒加载

        */

        private val mWebView:WebViewby lazy{

            m_WebView

    }

        override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_main)

    //1.开启Kotlin与H5通信的开关

          setWebView()

    }

    //lamada

    //    var add = {a:int,b:int -> a+b}

        var setWebView ={

            m_WebView.settings.javaScriptEnabled =true

            //2.设置两个Client

            m_WebView.webViewClient = MyWebviewClient()

    m_WebView.webChromeClient = MyWebChromeClient()

    //kotlin与H5通信开关

            //设置桥梁类

            //对象.方法名  对象的别名

            //H5调用kotlin

            m_WebView.addJavascriptInterface(JavaScriptMethods(this,m_WebView),"jsInterface")

    m_WebView.loadUrl("file:///android_asset/javascript.html")

    }

        inner private class MyWebviewClient :WebViewClient(){

    override fun onPageFinished(view: WebView?, url: String?) {

    super.onPageFinished(view, url)

    //kotlin主动调用H5

    //            m_WebView.loadUrl("javascript:方法名(参数)")

                var json = JSONObject()

    json.put("name","kotlin")

    m_WebView.loadUrl("javascript:message( " + json.toString() +")")

    }

    }

    private class MyWebChromeClient :WebChromeClient(){

    //控制加载进度条

            override fun onProgressChanged(view: WebView?, newProgress: Int) {

    super.onProgressChanged(view, newProgress)

    }

    }

    }

    二:桥梁

    class JavaScriptMethods {

    private var mContent:Context? =null

        private var mWebview:WebView? =null

        constructor(mContent: Context?,webview:WebView?) {

    this.mContent = mContent

    this.mWebview = webview

    }

    @JavascriptInterface//17 4.2上能调

        fun showTip(json:String){

    Toast.makeText(mContent,json,Toast.LENGTH_LONG).show()

    }

    @JavascriptInterface

        fun getStorDate(json:String){

    var isJson = JSONObject(json)

    //http://dev.yuedaowang.com/driverapp/v2/getParameterList

            val callback = isJson.opt("callback")

    println("获取酒店数据")

    //异步操作在子线程操作

            doAsync {

                var url = URL("http://dev.yuedaowang.com/driverapp/v2/getParameterList")

    //流变成字符串

                val readText = url.readText()

    println(readText)

    //回传数据

    //            mWebview!!.

                mContent?.let {

                    it.runOnUiThread {

                        mWebview?.let {

                            it.loadUrl("javascript:" + callback +"(" + readText +")")

    }

    }

    }

    }

        }

    }

    三 :模拟的H5页面

    <!DOCTYPE html>

            <meta charset="UTF-8">

            <title>first

              function callAndroid(){

    console.log("点击啦")

    var json = {"name":"html5"}

    jsInterface.showTip(JSON.stringify(json))

    }

    var message = function(json){

    alert(JSON.stringify(json))

    }

    function callkotlin(){

    console.log("callback")

    var json = {"callback":"receiveHotelDate"}

    //调用kotlin方法

                    jsInterface.getStorDate(JSON.stringify(json))

    }

    var receiveHotelDate = function(json){

    alert(JSON.stringify(json))

    }

            <button id="btn1" onclick="callAndroid()">js调用kotlin方法

            <button id="btn2" onclick="callkotlin()">js调用kotlin方法(calllback)

    </html>

    四 :附带图

    相关文章

      网友评论

          本文标题:Kotlin与H5通信方式(h5调用kt kt调用h5 cal

          本文链接:https://www.haomeiwen.com/subject/brrhjctx.html