公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
AgentWeb 是一个基于 Android 的 WebView 功能强大的组件库。在 WebView 性能和用户体验做了很多的优化,目前有网友开源在了 github 上。本文主要负责讲解它的一些简单的用法。
AgentWeb 介绍
AgentWeb 是一个基于的 Android WebView ,极度容易使用以及功能强大的库 。
AgentWeb 功能
- 支持进度条以及自定义进度条
- 支持文件下载
- 支持文件下载断点续传
- 支持下载通知形式提示进度
- 简化 Javascript 通信
- 支持 Android 4.4 Kitkat 以及其他版本文件上传
- 支持注入 Cookies
- 加强 Web 安全
- 兼容低版本安全 Js 通信
AgentWeb 的优点
Web | 文件下载 | 文件上传 | Js 通信 | 断点续传 | 使用简易度 | 进度条 | 线程安全 |
---|---|---|---|---|---|---|---|
WebView | 不支持 | 不支持 | 支持 | 不支持 | 麻烦 | 没有 | 不安全 |
AgentWeb | 支持 | 支持 | 更简洁 | 支持 | 简洁 | 有 | 安全 |
基本用法
在使用 之前,我们先引入它。
-
Gradle
compile 'com.just.agentweb:agentweb:4.0.0' // (必选) compile 'com.just.agentweb:download:4.0.0' // (可选) compile 'com.just.agentweb:filechooser:4.0.0'// (可选)
-
Maven
<dependency> <groupId>com.just.agentweb</groupId> <artifactId>agentweb</artifactId> <version>4.0.0</version> <type>pom</type> </dependency>
看下面的例子:
mAgentWeb = AgentWeb.with(this) .setAgentWebParent((LinearLayout) view, new LinearLayout.LayoutParams(-1, -1)) .useDefaultIndicator() .createAgentWeb() .ready() .go("http://www.xttblog.com");
运行效果如下所示:
调用 Javascript 方法
function callByAndroid(){ console.log("callByAndroid") } mAgentWeb.getJsEntraceAccess().quickCallJs("callByAndroid");
Javascript 调 Java
mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterface(mAgentWeb,this)); window.android.callAndroid();
事件处理
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 业余草:www.xttblog.com if (mAgentWeb.handleKeyEvent(keyCode, event)) { return true; } return super.onKeyDown(keyCode, event); }
跟随 Activity Or Fragment 生命周期 , 释放 CPU 更省电 。
@Override protected void onPause() { mAgentWeb.getWebLifeCycle().onPause(); super.onPause(); } @Override protected void onResume() { mAgentWeb.getWebLifeCycle().onResume(); super.onResume(); } @Override public void onDestroyView() { mAgentWeb.getWebLifeCycle().onDestroy(); super.onDestroyView(); }
全屏视频播放
<!--如果你的应用需要用到视频 , 那么请你在使用 AgentWeb 的 Activity 对应的清单文件里加入如下配置--> android:hardwareAccelerated="true" android:configChanges="orientation|screenSize"
定位
<!--AgentWeb 是默认允许定位的 ,如果你需要该功能 , 请在你的 AndroidManifest 文件里面加入如下权限 。--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
WebChromeClient Or WebViewClient 处理业务逻辑
AgentWeb.with(this)// .setAgentWebParent(mLinearLayout,new LinearLayout.LayoutParams(-1,-1) )// .useDefaultIndicator()// .setReceivedTitleCallback(mCallback) .setWebChromeClient(mWebChromeClient) .setWebViewClient(mWebViewClient) .setSecutityType(AgentWeb.SecurityType.strict) .createAgentWeb()// .ready() .go(getUrl()); private WebViewClient mWebViewClient=new WebViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { //do you work } }; private WebChromeClient mWebChromeClient=new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { //do you work } };
返回上一页
if (!mAgentWeb.back()){ AgentWebFragment.this.getActivity().finish(); }
获取 WebView
mAgentWeb.getWebCreator().getWebView();
文件下载监听
protected DownloadListenerAdapter mDownloadListenerAdapter = new DownloadListenerAdapter() { @Override public boolean onStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength, AgentWebDownloader.Extra extra) { extra.setOpenBreakPointDownload(true) .setIcon(R.drawable.ic_file_download_black_24dp) .setConnectTimeOut(6000) .setBlockMaxTime(2000) .setDownloadTimeOut(60L * 5L * 1000L) .setAutoOpen(true) .setForceDownload(false); return false; } @Override public void onBindService(String url, DownloadingService downloadingService) { super.onBindService(url, downloadingService); mDownloadingService = downloadingService; LogUtils.i(TAG, "onBindService:" + url + " DownloadingService:" + downloadingService); } @Override public void onUnbindService(String url, DownloadingService downloadingService) { super.onUnbindService(url, downloadingService); mDownloadingService = null; LogUtils.i(TAG, "onUnbindService:" + url); } @Override public void onProgress(String url, long loaded, long length, long usedTime) { int mProgress = (int) ((loaded) / Float.valueOf(length) * 100); LogUtils.i(TAG, "onProgress:" + mProgress); super.onProgress(url, loaded, length, usedTime); } @Override public boolean onResult(String path, String url, Throwable throwable) { if (null == throwable) { //do you work } else { } return false; } };
AgentWeb 的功能很强大,还有很多实用的功能,请参考官网 api 和相关 demo。
AgentWeb 内部结构
- IndicatorController 进度条控制器
- WebCreator 创建 WebView 。
- WebSettings 统一设置 WebView 的 settings
- WebSecurityController 安全控制器
- JsEntraceAccess Js 方法入口
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » AgentWeb 教程