BridgeWebActivity.kt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package com.yingyangfly.webview
  2. import android.annotation.SuppressLint
  3. import android.content.pm.ActivityInfo
  4. import android.os.Build
  5. import android.os.Bundle
  6. import android.webkit.WebResourceRequest
  7. import android.webkit.WebSettings
  8. import android.webkit.WebView
  9. import android.webkit.WebViewClient
  10. import com.alibaba.android.arouter.facade.annotation.Route
  11. import com.github.lzyzsd.jsbridge.BridgeHandler
  12. import com.github.lzyzsd.jsbridge.CallBackFunction
  13. import com.yingyangfly.baselib.base.BaseActivity
  14. import com.yingyangfly.baselib.router.RouterUrlCommon
  15. import com.yingyangfly.webview.databinding.ActivityBridgeWebBinding
  16. /**
  17. * BridgeWebview
  18. */
  19. @Route(path = RouterUrlCommon.WEB_VIEW_INTERACTION_JS)
  20. class BridgeWebActivity : BaseActivity<ActivityBridgeWebBinding>() {
  21. private lateinit var webSettings: WebSettings
  22. private var url: String = ""
  23. override fun onCreate(savedInstanceState: Bundle?) {
  24. url = intent.getStringExtra("url") ?: ""
  25. super.onCreate(savedInstanceState)
  26. }
  27. override fun initViews() {
  28. initWebView()
  29. }
  30. override fun initListener() {
  31. }
  32. override fun initData() {
  33. }
  34. @SuppressLint("JavascriptInterface", "SetJavaScriptEnabled")
  35. private fun initWebView() {
  36. webSettings = binding.webView.settings
  37. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  38. webSettings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
  39. }
  40. val ua = webSettings.userAgentString
  41. //必须设置
  42. webSettings.userAgentString = "$ua; app/lottchina Android"
  43. webSettings.javaScriptCanOpenWindowsAutomatically = true
  44. webSettings.javaScriptEnabled = true
  45. webSettings.setAppCacheEnabled(true)
  46. webSettings.allowUniversalAccessFromFileURLs = true
  47. webSettings.cacheMode = WebSettings.LOAD_DEFAULT
  48. /**必须的设置, 访问网页版的H5,一定要设置。该方法是设置支持DomStorage,
  49. * DOM Storage 分为 sessionStorage 和 localStorage。
  50. * localStorage 对象和 sessionStorage 对象使用方法基本相同,它们的区别在于作用的范围不同。
  51. * sessionStorage 用来存储与页面相关的数据,它在页面关闭后无法使用。而 localStorage 则持久存在,在页面关闭后也可以使用。
  52. */
  53. webSettings.domStorageEnabled = true
  54. // 通过addJavascriptInterface()将Java对象映射到JS对象 下面一行代码是 JS调用原生方法
  55. binding.webView.addJavascriptInterface(AndroidToJs(this), "callJavaFunc")
  56. // binding.webView.callHandler("javascript:callJavaFunc()"
  57. // ) { value -> Log.e("wpp", "----------------------------" + value) }
  58. binding.webView.registerHandler("", object : BridgeHandler {
  59. override fun handler(data: String?, function: CallBackFunction?) {
  60. }
  61. })
  62. // binding.webView.addJavascriptInterface(AndroidToJs(this), "callbackImgHandle")
  63. // binding.webView.addJavascriptInterface(AndroidToJs(this), "callbackBackHandle")
  64. binding.webView.isDrawingCacheEnabled = true
  65. binding.webView.buildDrawingCache()
  66. binding.webView.buildLayer()
  67. binding.webView.webViewClient = object : WebViewClient() {
  68. override fun shouldOverrideUrlLoading(
  69. view: WebView?,
  70. request: WebResourceRequest?
  71. ): Boolean {
  72. url.let {
  73. view?.loadUrl(it)
  74. }
  75. return true
  76. }
  77. override fun onPageFinished(view: WebView?, url: String?) {
  78. super.onPageFinished(view, url)
  79. }
  80. }
  81. binding.webView.loadUrl(url)
  82. }
  83. override fun onDestroy() {
  84. destoryWebView()
  85. super.onDestroy()
  86. }
  87. /**
  88. * 结束webview清空缓存
  89. */
  90. private fun destoryWebView() {
  91. binding.webView.stopLoading() // 停止加载
  92. binding.webView.removeAllViews() // 移除webview上子view
  93. binding.webView.clearCache(true) // 清除缓存
  94. binding.webView.clearHistory() // 清楚历史
  95. binding.webView.destroy() // 销毁WebView自身。
  96. }
  97. override fun onResume() {
  98. /**
  99. * 设置为横屏
  100. */
  101. if (requestedOrientation != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
  102. requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
  103. }
  104. super.onResume()
  105. }
  106. }