build.gradle(Moudle.app)androidx的引用
1 | implementation 'com.just.agentweb:agentweb-androidx:4.1.4' |
布局的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> //标题 <include layout="@layout/activity_left_title_text_view"/> <LinearLayout android:id="@+id/view" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> |
kotlin实现案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | import android.net.http.SslError import android.os.Bundle import android.view.KeyEvent import android.view.View import android.view.ViewGroup import android.webkit.SslErrorHandler import android.webkit.WebView import com.jeremyliao.liveeventbus.LiveEventBus import com.just.agentweb.AgentWeb import com.just.agentweb.WebChromeClient import kotlinx.android.synthetic.main.activity_left_title_text_view.* import kotlinx.android.synthetic.main.activity_my_web_view.* import org.jetbrains.anko.toast /** *@Created by wrs on 2020/9/25,11:43 *@Description: h5页面加载 */ class MyWebActivity : BaseActivity(),View.OnClickListener,JsInterfaceListener { var mAgentWeb:AgentWeb? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my_web_view) initView() initData() initListener() } override fun initView() { tvTitle.text = "" } private val webChromeClient = object : WebChromeClient(){ override fun onReceivedTitle(view: WebView?, title: String?) { super.onReceivedTitle(view, title) tvTitle.text = title } } private fun getWebViewClient(): com.just.agentweb.WebViewClient { return object : com.just.agentweb.WebViewClient() { override fun onReceivedSslError( view: WebView?, handler: SslErrorHandler, error: SslError? ) { handler.proceed() } } } override fun initData() { //访问h5的路径 val pathUrl = intent.getStringExtra(MyParms.PARAMS) mAgentWeb = AgentWeb.with(this) .setAgentWebParent(view, ViewGroup.LayoutParams(-1, -1)) .useDefaultIndicator() .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) .setWebChromeClient(webChromeClient) .setWebViewClient(getWebViewClient()) .createAgentWeb() .ready() .go(pathUrl) val webSetting = mAgentWeb?.webCreator?.webView?.settings webSetting?.javaScriptEnabled = true //此处为agentweb声明js方法 mAgentWeb?.jsInterfaceHolder?.addJavaObject("android",AndroidInterface(this)) } override fun initListener() { ivBack.setOnClickListener(this) } override fun jsPullUpMethod(method: String, parmas: String) { when(method){ "toMain" ->{//js调用android的方法 toast("js调用android的方法") } } } override fun onClick(v: View?) { when(v?.id){ R.id.ivBack ->{//返回 if (mAgentWeb?.back() == true){//返回上一层 }else{//关闭当前webview界面 finish() } } } } override fun onPause() { mAgentWeb?.webLifeCycle?.onPause() super.onPause() } override fun onResume() { mAgentWeb?.webLifeCycle?.onResume() super.onResume() } override fun onDestroy() { mAgentWeb?.webLifeCycle?.onDestroy() super.onDestroy() } override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { return if (mAgentWeb?.let { it.handleKeyEvent(keyCode, event) } == true) { true } else super.onKeyDown(keyCode, event) } } |
AndroidInterface类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import android.webkit.JavascriptInterface; /** * * * @Created by wrs on 2020/10/16,13:57 * @Description: js条用android的方法 */ public class AndroidInterface extends Object { private JsInterfaceListener jsInterface; public AndroidInterface(JsInterfaceListener jsInterface) { this.jsInterface = jsInterface; } @JavascriptInterface public void jsCallMethod(String method,String params){ jsInterface.jsPullUpMethod(method,params); } } |
js调android的监听方法
1 2 3 4 5 6 7 8 9 10 11 | package com.dsy.jxih.iml /** *@Created by wrs on 2020/10/16,14:00 *@Description: js调用android的方法配合AndroidInterface */ interface JsInterfaceListener { fun jsPullUpMethod(method:String,params:String) } |