1. 程式人生 > 其它 >Kotlin和H5通訊的兩種方式

Kotlin和H5通訊的兩種方式

第一種:

在h5中呼叫kotlin的方法:使用flask起一個簡單的web專案,在專案中新增一個按鈕,並加入js程式碼

然後在kotlin中建立一個類:

  1. package com.example.mykotlinh5
  2. import android.content.Context
  3. import android.webkit.JavascriptInterface
  4. import android.widget.Toast
  5. // Kotlin與H5通訊的橋樑類
  6. class JsMethods(context:Context) {
  7. // 上下們物件
  8. private var mContext = context
  9. @JavascriptInterface // 安卓4.2之後都要加
  10. fun shouToast(json:String) {
  11. // 第一種方式彈出
  12. Toast.makeText(mContext, json, Toast.LENGTH_SHORT).show()
  13. }
  14. }

在main Activity中:

  1. package com.example.mykotlinh5
  2. import android.annotation.SuppressLint
  3. import androidx.appcompat.app.AppCompatActivity
  4. import android.os.Bundle
  5. import android.webkit.WebChromeClient
  6. import android.webkit.WebView
  7. import android.webkit.WebViewClient
  8. import kotlinx.android.synthetic.main.activity_main.*
  9. import org.json.JSONObject
  10. class MainActivity : AppCompatActivity() {
  11. // 懶載入:使用的時候才初始化
  12. private val mWebView:WebView by lazy {
  13. web_v
  14. }
  15. override fun onCreate(savedInstanceState: Bundle?) {
  16. super.onCreate(savedInstanceState)
  17. setContentView(R.layout.activity_main)
  18. // 使用anko快速找到id,並設定裡面的值
  19. // 開啟kotlin與h5通訊的開關
  20. mWebView.settings.javaScriptEnabled = true
  21. // 設定兩個webViewClient
  22. mWebView.webViewClient = MyWebViewClient()
  23. mWebView.webChromeClient = MyWebChromeClient()
  24. //H5與Kotlin橋樑類通訊的橋樑類:第一個引數是被呼叫方法的物件,第二個引數是物件別名
  25. mWebView.addJavascriptInterface(JsMethods(this), "jsInterface")
  26. //
  27. mWebView.loadUrl("http://192.168.1.23:5000/")
  28. }
  29. // 建立兩個WebViewClient
  30. private inner class MyWebViewClient : WebViewClient() {
  31. // 當頁面載入完成呼叫的方法
  32. override fun onPageFinished(view: WebView?, url: String?) {
  33. super.onPageFinished(view, url)
  34. // 呼叫H5的方法:Kotlin呼叫h5方法規範:mWebView.loadUrl("javascript:方法名(引數)")
  35. var json = JSONObject()
  36. json.put("name", "我是Kotlin傳給H5的方法")
  37. val jsString = json.toString()
  38. mWebView.loadUrl("""javascript:showMessage($jsString)""")
  39. }
  40. }
  41. // lambda表示式
  42. // 建立一個ChromeClient
  43. private class MyWebChromeClient : WebChromeClient() {
  44. // 控制載入的進度條
  45. override fun onProgressChanged(view: WebView?, newProgress: Int) {
  46. super.onProgressChanged(view, newProgress)
  47. }
  48. }
  49. }

然後就可以在頁面中呼叫到了:


如有失效,請留言告知丨轉載請註明原文連結:Kotlin和H5通訊的兩種方式