Android 第三方库AgentWeb的使用

一:前言

Android开发经常会用到WebView,用于加载网页。系统自带的WebView性能和流畅度都一般,AgentWeb是一款第三方的WebView,性能比系统自带的要好,功能也更多。
AgentWeb是一个高度封装的Android WebView,简单易用,带进度条,支持文件上传,下载,简化Javascript通信,链式调用,加强Web安全的库。让你轻松集成一个轻量级浏览器在应用上。

功能

支持进度条以及自定义进度条
支持文件下载
支持文件下载断点续传
支持下载通知形式提示进度
简化 Javascript 通信
支持 Android 4.4 Kitkat 以及其他版本文件上传
支持注入 Cookies
加强 Web 安全
支持全屏播放视频
兼容低版本 Js 安全通信
更省电
支持调起微信支付
支持调起支付宝
默认支持定位
支持传入 WebLayout
支持自定义 WebView
支持 JsBridge

二:使用

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需要配置
 }
}

//添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

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);

原文:https://segmentfault.com/a/1190000039663918

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值