android第三方图标库,Android 第三方库AgentWeb的使用_Top Liu的博客-程序员宅基地

技术标签: android第三方图标库  

Android 第三方库AgentWeb的使用

一:前言

Android开发经常会用到WebView,用于加载网页。系统自带的WebView性能和流畅度都一般,AgentWeb是一款第三方的WebView,性能比系统自带的要好,功能也更多。

AgentWeb是一个高度封装的Android WebView,简单易用,带进度条,支持文件上传,下载,简化Javascript通信,链式调用,加强Web安全的库。让你轻松集成一个轻量级浏览器在应用上。

1.功能支持进度条以及自定义进度条

支持文件下载

支持文件下载断点续传

支持下载通知形式提示进度

简化 Javascript 通信

支持 Android 4.4 Kitkat 以及其他版本文件上传

支持注入 Cookies

加强 Web 安全

支持全屏播放视频

兼容低版本 Js 安全通信

更省电 。

支持调起微信支付

支持调起支付宝(请参照sample)

默认支持定位

支持传入 WebLayout(下拉回弹效果)

支持自定义 WebView

支持 JsBridge

AgentWeb是一个轻量级而且功能强大的Web库,大小只有200k

bVcQz96

二:使用

1.依赖:implementation 'com.just.agentweb:agentweb:4.1.3' // (必选)使用这个基础的webView实现

implementation 'com.just.agentweb:filechooser:4.1.3'// (可选)

implementation 'com.download.library:Downloader:4.1.3'// (可选)

2.基本用法public class FourActivity extends AppCompatActivity {

private LinearLayout ll_root;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_four);

ll_root = findViewById(R.id.ll_root);

AgentWeb agentWeb = AgentWeb.with(this)//传入Activity

.setAgentWebParent(ll_root, new LinearLayout.LayoutParams(-1, -1))//传入AgentWeb 的父控件 ,如果父控件为 RelativeLayout , 那么第二参数需要传入 RelativeLayout.LayoutParams .useDefaultIndicator()//使用默认进度条

.createAgentWeb()

.ready()//重试

.go("https://www.baidu.com");//https,Android9.0要是使用http需要配置

}

}

//添加权限

Javascript调用Java,AndroidInterface类中有创建一些js方法//Javascript调Java

agentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterface(agentWeb,this));

AndroidInterface类中public class AndroidInterface {

private AgentWeb agent;

private Activity context;

public AndroidInterface(AgentWeb agent, Activity context) {

this.agent = agent;

this.context = context;

}

@JavascriptInterface

public void callAndroid(String url) {

//要用 @JavascriptInterface标注

}

}

调用Javascript方法//调用Javascript中的方法callAndroid

mAgentWeb.getJsAccessEntrace().quickCallJs("callAndroid");

事件处理//手机的事件处理

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (agentWeb.handleKeyEvent(keyCode,event)){

return true;

}

return super.onKeyDown(keyCode, event);

}

点击返回键@Override

public void onBackPressed() {

if (agentWeb!=null&&agentWeb.getIEventHandler().back()){

Log.i("callBack", "go back");

}else {

Log.i("callBack", "finish");

finish();

}

}

跟随Activity 或Fragment生命周期,释放CPU更省电@Override

protected void onPause() {

mAgentWeb.getWebLifeCycle().onPause();

super.onPause();

}

@Override

protected void onResume() {

mAgentWeb.getWebLifeCycle().onResume();

super.onResume();

}

创建WebviewClient,用来帮助WebView处理各种通知,请求事件

有如下等方法

onLoadResource()

onPageStart()

onPageFinish()

onReceiveError()

onReceivedHttpAuthRequest()WebViewClient webViewClient=new WebViewClient(){

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

String title=view.getTitle();//拿到webView的title

if (!TextUtils.isEmpty(title)){

setToolBarTitle(title);

}

}

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

super.onPageStarted(view, url, favicon);

}

@Override

public void onPageCommitVisible(WebView view, String url) {

super.onPageCommitVisible(view, url);

}

@Override

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

return super.shouldOverrideUrlLoading(view, request);

}

};

创建WebChromeClient,辅助WebView处理JavaScript的对话框,网站图标,网站title,加载进度等,

有如下等方法

onCloseWindow(关闭WebView)

onCreateWindow()

onJsAlert(WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)

onJsPrompt()

onJsConfirm()

onProgressChanged()

onReceivedIcon()

onReceivedTitle()private WebChromeClient webChromeClient=new WebChromeClient(){

@Override

public void onProgressChanged(WebView view, int newProgress) {

super.onProgressChanged(view, newProgress);

}

};

//使用是链式调用中加入

agentWeb = AgentWeb.with(this)//传入Activity

.setAgentWebParent(ll_root, new LinearLayout.LayoutParams(-1, -1))//传入AgentWeb 的父控件 ,如果父控件为 RelativeLayout , 那么第二参数需要传入 RelativeLayout.LayoutParams .useDefaultIndicator()//使用默认进度条

.setWebViewClient(webViewClient)//加入webViewClient

.setWebChromeClient(webChromeClient)//加入webChromeClient

.createAgentWeb()

.ready()//重试

.go("https://www.baidu.com");

修改AgentWeb默认的背景色FrameLayout frameLayout =agentWeb.getWebCreator().getWebParentLayout();

frameLayout.setBackgroundColor(Color.BLUE);

三:注意事项:支付宝使用需要引入支付宝SDK ,并在项目中依赖 , 微信支付不需要做任何操作。

AgentWeb 内部使用了 AlertDialog 需要依赖 AppCompat 主题 。

setAgentWebParent 不支持 ConstraintLayout 。

mAgentWeb.getWebLifeCycle().onPause();会暂停应用内所有WebView 。

minSdkVersion 低于等于16以下自定义WebView请注意与 JS 之间通信安全。

AgentWeb v3.0.0以上版本更新了包名,混淆的朋友们,请更新你的混淆配置。

多进程无法取消下载,解决方案

END:知行合一

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29911401/article/details/117519876

智能推荐

ruby学习---rails web框架_Mar.三月的博客-程序员宅基地

最近进入新公司,需要搞ruby,看一下ruby的框架吧RailsRails 是使用 Ruby 语言编写的 Web 应用开发框架,目的是通过解决快速开发中的共通问题,简化 Web 应用的开发。与其他编程语言和框架相比,使用 Rails 只需编写更少代码就能实现更多功能。有经验的 Rails 程序员常说,Rails 让 Web 应用开发变得更有趣ubuntu16.04安装ruby以及...

数据库审计_m18994118189的博客-程序员宅基地

一、标准化审计:1.系统权限审计(1).开启数据库标准审计,使用db_extended级别SQL> alter system set audit_trail='DB_EXTENDED' scope=spfile;(2).清空标准化审计所使用的数据字典表,并把该表移动到users表空间SQL> alter table aud$ move  tablespace users;...

uart stdio的移植-1_qq_41680432的博客-程序员宅基地

1、什么是stdio(1)、#include <stdio.h>(2)、stdio: standard input output , 标准输入输出。(3)、标准输入输出就是操作系统定义的默认的输入和输出通道。一般在PC机的情况下,标准输入指我键盘,标准输出指的是屏幕。(4)、printf函数和scanf函数可以和底层输入 / 输出函数绑定,然后这两个函数就可以和stdio绑定...

navicat连接不上Linux服务器上的MySQL_鷥忆的博客-程序员宅基地

1、首先确定你的linux已经关闭防火墙详细操作请看这里;如果是公司服务器防火墙比较重要不能关闭,那就麻烦点了,需要在防火墙的配置文件下配置属性。如果还不能解决,请继续往下看。2、如果是云服务器,请确认3306端口是否已经设置对外开放此处以阿里云服务器为例,阿里云的服务器默认端口是不对外开放的,如果想要供外部访问,需要在安全组中手动添加规则,详情操作可以参考官方文档 :http...

C ++常用库函数_qq_43356551的博客-程序员宅基地

C ++常用库函数如图1所示,常用数学函数头文件#include <math>或者#include <math.h>函数原型功能返回值int abs(int x)求整数X的绝对值绝对值双acos(双x)计算阿科斯(X)的值计算结果双asin(双x)计算阿尔辛(X)的值计算结果双atan(双x)计算反正切(X)的值计算结果双cos(双x)...

掌上医院:手机生活助手_iteye_15500的博客-程序员宅基地

掌上医院是平安集团旗下平安1号医网推出的新型健康服务手机客户端。借助移动互联网技术,“掌上医院”有效整合了各地优医疗资源为手机用户提供贴身服务。通过“询医”、“问药”、“商场”三大功能,在手机上实现了真正意义上的“掌上医院”,帮助用户解决生活中遇到的各类健康问题。下面小编就说下试用后的感受。应用名称:掌上医院应用平台:Android传送门杀手指数:8...

随便推点

论文笔记:Span-Based Event Coreference Resolution_期待成功的博客-程序员宅基地

作 者:崔金满单位:燕山大学论文地址:https://www.aaai.org/AAAI21Papers/AAAI-9086.LJ.pdf数据集:KBP 2016和KBP 2017来源:AAAI 2021问题定义:文档内事件共指解析任务是确定文档中提到的哪个事件指的是同一个真实世界的事件;比如论文中的例子:昨天,德里警方扇了示威者一把掌(),当她在医院外示威()时,几乎以此同时,在印度北部的另一场抗议()活动中,一名60多岁的妇女被警方殴打致死(),到目前为止,德里警方已..

readprocessmemory函数_qq_40605829的博客-程序员宅基地

#include<stdio.h>#include<Windows.h>int main(){ //SIZE_T* a = 0; int *tmp; DWORD dwNumberOfBytesRead; HANDLE pid=OpenProcess(PROCESS_ALL_ACCESS, FALSE, 7052);//PROCESS_ALL_ACCESS 为渴望得到的访问权限(标志) if (!ReadProcessMemory(pid, (LPCVOID)0x77A

MySQL查询语句练习题_weixin_30697239的博客-程序员宅基地

1.创建student和score表CREATETABLEstudent(idINT(10)NOTNULLUNIQUEPRIMARYKEY,nameVARCHAR(20)NOTNULL,sexVARCHAR(4),birthYEAR,departmentVARCHAR(20),addressVARC...

jQuery--概述、语法_张0x0的博客-程序员宅基地

什么是jQuery,如何使用jQuery

Greendao使用_frescon的博客-程序员宅基地

private DaoMaster.DevOpenHelper devopenhelpers;private DaoMaster mDaoMaster;private DaoSession mDaoSession;private static GreenDaoManager mInstance; //单例private GreenDaoManager(){ if (mInst...

请大神帮小白屡屡思路_qq_38734947的博客-程序员宅基地

1.游戏角色:道士,法师,战士2.每个角色都有属性:生命值,名字,技能等级,人物等级人物等级不同,生命值不同:道士:人物级别每升一级生命值增加70法师:人物级别每升一级生命值增加50战士:人物级别每升一级生命值增加1003.角色方法:攻击(),根据技能等级,伤害值递增道士:灵魂火符    1级:50点伤害    2级:100点伤害   3级:200伤害法师: