Android Agentweb三方 WebView 完成与 H5 的混合开发
Posted null.....
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Agentweb三方 WebView 完成与 H5 的混合开发相关的知识,希望对你有一定的参考价值。
android Agentweb三方 WebView 完成与 H5 的混合开发
先来看今天完成的效果图:
图中的曲线图是 html写的,今天要完成的任务是采用三方的 WebView 完成Android 与 H5 的混合交互
步入正题
简单操作我就不说了,百度一下全长得一样,我就随便贴一个参考文档了
导入依赖:
implementation ‘com.just.agentweb:agentweb-androidx:4.1.4’
添加必要权限:
<!-- 8.0安装未知应用来源 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission
android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.PERMISSION_GRANTED" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACTION_PICK" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INTERNET"/>
html 的代码放在 main/assets 中:
在 Android 引用为:
"file:///android_asset/echartMoreLineStyle.html"
html 的代码我目前还不会写,直接拷贝的我们项目中的
使用:
首先需要在 xml 中获取 2 个’占位符’用来展示 webView 的效果
- 红色:三条曲线 html 图
- 黑色:一条曲线 html 图
打开百度页面
initBaiDu("http://www.baidu.com");
private void initBaiDu(String url) {
AgentWeb mAgentWeb = AgentWeb.with(this)
//设置 WebView 占满
.setAgentWebParent(frameLayout3, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT))
//关闭指示器
.closeIndicator()
//设置报错布局
.setMainFrameErrorView(R.layout.agentweb_error_page, -1)
//打开其他应用时,弹窗咨询用户是否前往其他应用
.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)
.createAgentWeb()
.ready()
//打开页面
.go(url);
mAgentWeb.getAgentWebSettings().getWebSettings().setjavascriptEnabled(true);
mAgentWeb.clearWebCache();
}
效果:
与 html 混合开发
先上代码:(一条线):
initWeb2("file:///android_asset/echart.html");
private void initWeb2(String url) {
AgentWeb mAgentWeb = AgentWeb.with(this)
.setAgentWebParent(frameLayout2, new FrameLayout.LayoutParams(-1, -1))
.closeIndicator()
.setWebViewClient(new MyWebViewClient(xAxis, value, (view, xAxis, value) ->
WebViewUtil.getInstance().loadLine(view, xAxis.toString(), value.toString())))
.setMainFrameErrorView(R.layout.agentweb_error_page, -1)
.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//打开其他应用时,弹窗咨询用户是否前往其他应用
.createAgentWeb()
.ready()
.get();
mAgentWeb.getAgentWebSettings().getWebSettings().setJavaScriptEnabled(true);
mAgentWeb.clearWebCache();
mAgentWeb.getUrlLoader().loadUrl(url);
}
这里最关键的是setWebViewClient()方法,该方法是调用 html 的方法,最终会执行到WebViewUtil上
辅助图:
这里这么写是为了更好地扩展,不把所有的代码写到一个类里面,遵守单一职责原则
当然也可以这么写效果是一样的.
WebViewUtil类:
辅助图:
在这个类中,android 端调用了 html 的方法,就直接吧 html 的效果拉起来了,最终实现了开头说的效果;
三条线的和一条线的同样的道理
使用 Agentweb 解析 html 代码并展示
先看效果:
准备好 html 代码:
String htmlData = "<p style=\\"text-align: center;\\"><span style=\\"font-size:18px\\"><strong>帮助说明</strong></span></p>\\n" +
"\\n" +
"<p style=\\"text-align: justify;\\"><span style=\\"font-size:18px\\"> 我是 html 标签内容</span>\\n" +
"</p>\\n" +
"\\n" +
"<p style=\\"text-align: justify;\\"><span style=\\"font-size:18px\\"> 😛😛😛😛</span>\\n" +
"</p>\\n" +
"\\n" +
"\\n" +
"<p style=\\"text-align:center\\"><img alt=\\"\\" src=\\"https://alifei02.cfp.cn/creative/vcg/800/new/VCG211147957933.jpg\\"\\n" +
" width=\\"100%\\"/></p>\\n" +
"\\n" +
"<p><span style=\\"font-size:18px\\"><span style=\\"color:red\\">注</span>:记得点赞评论收藏哦~~ </span></p>";
使用:
AgentWeb mAgentWeb = AgentWeb.with(this)
.setAgentWebParent(frameLayout, new LinearLayout.LayoutParams(-1, -1))
.closeIndicator()
.setMainFrameErrorView(R.layout.agentweb_error_page, -1)
.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//打开其他应用时,弹窗咨询用户是否前往其他应用
.createAgentWeb()
.ready()
.get();
mAgentWeb.getAgentWebSettings().getWebSettings().setJavaScriptEnabled(true);
mAgentWeb.clearWebCache();
//解析 html 文件
mAgentWeb.getUrlLoader().loadData(htmlData,"text/html", "utf-8");
通过loadData来解析 html 代码
mAgentWeb.getUrlLoader().loadData(htmlData,"text/html", "utf-8");
loadData参数:
- 参数一:html 代码
- 参数三:编码格式
原创不易,您的点赞就是对我最大的支持!
以上是关于Android Agentweb三方 WebView 完成与 H5 的混合开发的主要内容,如果未能解决你的问题,请参考以下文章
android 7.0 浏览器 拦截适配 shouldOverrideUrlLoading
Android 使用AgentWeb库轻量级H5混合开发(加载网页)
webdeviceagent无法获得webview内容ios
javascript 提供用于从React-Native WebView发送和接收消息的示例实现(使用postMessage / onMessage WebVie)