项目地址:https://link.jianshu.com/?t=https://github.com/Justson/AgentWeb

AgentWeb 是一个基于的 Android WebView ,极度容易使用以及功能强大的库,提供了 Android WebView 一系列的问题解决方案 ,并且轻量和极度灵活

引入
Gradle
api ‘com.just.agentweb:agentweb:4.0.3-beta’ // (必选)
api ‘com.just.agentweb:filechooser:4.0.3-beta’// (可选)
api ‘com.just.agentweb:download:4.0.3-beta’ // (可选)
api ‘com.github.Justson:Downloader:v4.0.3’// (可选)

基础用法

mAgentWeb = AgentWeb.with(this).setAgentWebParent(view, new LinearLayout.LayoutParams(-1, -1))                .useDefaultIndicator().createAgentWeb().ready().go("URL");

调用 Javascript 方法拼接太麻烦 ? 请看 。

    function callByAndroid(){console.log("callByAndroid")}
mAgentWeb.getJsAccessEntrace().quickCallJs("callByAndroid");

Javascript 调 Java ?

 mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterface(mAgentWeb,this));window.android.callAndroid();

事件处理

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {if (mAgentWeb.handleKeyEvent(keyCode, event)) {    return true;}return super.onKeyDown(keyCode, event);
}

跟随 Activity Or Fragment 生命周期 , 释放 CPU 更省电 。

  @Overrideprotected void onPause() {mAgentWeb.getWebLifeCycle().onPause(); super.onPause();}@Overrideprotected void onResume() {mAgentWeb.getWebLifeCycle().onResume();super.onResume();}@Overridepublic 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 与 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(){@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {//do you  work}};private WebChromeClient mWebChromeClient=new WebChromeClient(){@Overridepublic 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() {

 @Overridepublic 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;}@Overridepublic void onBindService(String url, DownloadingService downloadingService) {super.onBindService(url, downloadingService);mDownloadingService = downloadingService;LogUtils.i(TAG, "onBindService:" + url + "  DownloadingService:" + downloadingService);}@Overridepublic void onUnbindService(String url, DownloadingService downloadingService) {super.onUnbindService(url, downloadingService);mDownloadingService = null;LogUtils.i(TAG, "onUnbindService:" + url);}@Overridepublic 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);}@Overridepublic boolean onResult(String path, String url, Throwable throwable) {if (null == throwable) { //do you work} else {}return false; }
};

查看 Cookies

String cookies=AgentWebConfig.getCookiesByUrl(targetUrl);

同步 Cookie

AgentWebConfig.syncCookie("http://www.jd.com","ID=XXXX");
MiddlewareWebChromeBase 支持多个 WebChromeClient

清空缓存

AgentWebConfig.clearDiskCache(this.getContext());

权限拦截

protected PermissionInterceptor mPermissionInterceptor = new PermissionInterceptor() {@Overridepublic boolean intercept(String url, String[] permissions, String action) {Log.i(TAG, "url:" + url + "  permission:" + permissions + " action:" + action);return false;}};

AgentWeb 完整用法

 mAgentWeb = AgentWeb.with(this).setAgentWebParent((LinearLayout) view, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)).useDefaultIndicator(-1, 3).setAgentWebWebSettings(getSettings()).setWebViewClient(mWebViewClient).setWebChromeClient(mWebChromeClient).setPermissionInterceptor(mPermissionInterceptor) .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) .setAgentWebUIController(new UIController(getActivity())) .setMainFrameErrorView(R.layout.agentweb_error_page, -1).useMiddlewareWebChrome(getMiddlewareWebChrome()).useMiddlewareWebClient(getMiddlewareWebClient()) .setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.DISALLOW).interceptUnkownUrl() .createAgentWeb().ready().go(getUrl());

AgentWeb 所需要的权限(在你工程中根据需求选择加入权限)

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"></uses-permission>

AgentWeb 所依赖的库

  compile "com.android.support:design:${SUPPORT_LIB_VERSION}" // (3.0.0开始该库可选)compile "com.android.support:support-v4:${SUPPORT_LIB_VERSION}"SUPPORT_LIB_VERSION=27.0.2(该值会更新)

AgentWeb 介绍相关推荐

  1. android 除了webview 浏览器控件,AgentWeb是基于Android WebView一个功能完善小型浏览器库...

    [技巧沙龙]AI开辟者拭魅战营-7分钟打造1个定制技能.7月22号,我们等你一路! Android 端 AgentWeb 介绍 AgentWeb是一个高度封装的 Android WebView ,简单 ...

  2. AgentWeb使用

    项目地址:https://github.com/Justson/AgentWeb AgentWeb 介绍 AgentWeb 是一个基于的 Android WebView ,极度容易使用以及功能强大的库 ...

  3. AgentWeb , 一个简洁易用的 Android Web 库

    转自:http://www.jianshu.com/p/c80da1c41af7 AgentWeb 介绍 AgentWeb 是一个高度封装的 Android WebView ,简单易用 , 带有进度条 ...

  4. Android kotlin 简洁易用的 Android web库 - AgentWeb

    <<返回总目录 文章目录 一.AgentWeb介绍 二.AgentWeb 功能 三.AgentWeb与WebView对比: 四.简单的AgentWeb的使用 一.AgentWeb介绍 Ag ...

  5. 隐私合规:收集SDK部分介绍

    com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...

  6. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  7. 常用开源协议介绍以及开源软件规范列表

    1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...

  8. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  9. pytorch学习笔记(九):PyTorch结构介绍

    PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...

最新文章

  1. QIIME 2用户文档. 4人体各部位微生物组分析实战Moving Pictures(2018.11)
  2. R语言plotly可视化:plotly可视化分裂的分组小提琴图、每个小提琴图内部分为两组数据、每个分组占小提琴图的一半(Split violin plot in R with plotly)
  3. 解决启动hadoop时datanode无法启动
  4. ftrace跟踪内核_ftrace、kpatch、systemtap的基本原理、联系和区别
  5. apache 增加新网站
  6. C语言实现文件读取矩阵乘法
  7. Qfile与QTextStream读写文本文件
  8. PS2021要求计算机配置,Photoshop2021体验:傻瓜操作体验下系统需求大大增加!
  9. 史上最管用的C盘深度清理秘籍
  10. java+mysql 基于ssm205网上购物超市系统#毕业设计
  11. php 限定字符长度,php-限制字符串长度
  12. KinhDown(度盘PC下载器)
  13. 转换世界地图到球纹理图
  14. 新安装的VS2019+opencv4.20如何删除旧的opencv配置
  15. 灵魂电钢琴音源 Native Instruments George Duke Soul Treasures
  16. linux服务器console口,Linux重定向console口控制台
  17. 阿里高频面试题:如何快速判断元素是不是在集合里?
  18. 百度飞桨AI达人创造营 | Day01:创意是如何诞生的
  19. 微信开发者工作遇到的ERROR
  20. 单片机中数制与数制的转换是怎样实现的

热门文章

  1. android中使用dimen定义尺寸 .
  2. Spark中组件Mllib的学习15之创建分布式矩阵
  3. 工作经验|lambada处理集合的常用10种实战骚操作,我都记录下来了
  4. excel-vba组内离均差
  5. oracle密码锁了,Oracle 修改密码 解锁
  6. DeOldify,这个开源的AI代码可以给你的黑白照片上色
  7. 【微积分易错点总结】函数、极限和连续
  8. 中文计算机核心期刊目录
  9. matlab第二章实训总结,matlab实训小结
  10. 精读《设计模式 - Prototype 原型模式》