Kotlin和H5通訊的兩種方式
阿新 • • 發佈:2021-08-08
第一種:
在h5中呼叫kotlin的方法:使用flask起一個簡單的web專案,在專案中新增一個按鈕,並加入js程式碼
然後在kotlin中建立一個類:
- package com.example.mykotlinh5
- import android.content.Context
- import android.webkit.JavascriptInterface
- import android.widget.Toast
- // Kotlin與H5通訊的橋樑類
- class JsMethods(context:Context) {
- // 上下們物件
- private var mContext = context
- @JavascriptInterface // 安卓4.2之後都要加
- fun shouToast(json:String) {
- // 第一種方式彈出
- Toast.makeText(mContext, json, Toast.LENGTH_SHORT).show()
- }
- }
在main Activity中:
- package com.example.mykotlinh5
- import android.annotation.SuppressLint
- import androidx.appcompat.app.AppCompatActivity
- import android.os.Bundle
- import android.webkit.WebChromeClient
- import android.webkit.WebView
- import android.webkit.WebViewClient
- import kotlinx.android.synthetic.main.activity_main.*
- import org.json.JSONObject
- class MainActivity : AppCompatActivity() {
- // 懶載入:使用的時候才初始化
- private val mWebView:WebView by lazy {
- web_v
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- // 使用anko快速找到id,並設定裡面的值
- // 開啟kotlin與h5通訊的開關
- mWebView.settings.javaScriptEnabled = true
- // 設定兩個webViewClient
- mWebView.webViewClient = MyWebViewClient()
- mWebView.webChromeClient = MyWebChromeClient()
- //H5與Kotlin橋樑類通訊的橋樑類:第一個引數是被呼叫方法的物件,第二個引數是物件別名
- mWebView.addJavascriptInterface(JsMethods(this), "jsInterface")
- //
- mWebView.loadUrl("http://192.168.1.23:5000/")
- }
- // 建立兩個WebViewClient
- private inner class MyWebViewClient : WebViewClient() {
- // 當頁面載入完成呼叫的方法
- override fun onPageFinished(view: WebView?, url: String?) {
- super.onPageFinished(view, url)
- // 呼叫H5的方法:Kotlin呼叫h5方法規範:mWebView.loadUrl("javascript:方法名(引數)")
- var json = JSONObject()
- json.put("name", "我是Kotlin傳給H5的方法")
- val jsString = json.toString()
- mWebView.loadUrl("""javascript:showMessage($jsString)""")
- }
- }
- // lambda表示式
- // 建立一個ChromeClient
- private class MyWebChromeClient : WebChromeClient() {
- // 控制載入的進度條
- override fun onProgressChanged(view: WebView?, newProgress: Int) {
- super.onProgressChanged(view, newProgress)
- }
- }
- }
然後就可以在頁面中呼叫到了:
如有失效,請留言告知丨轉載請註明原文連結:Kotlin和H5通訊的兩種方式