Java基础、中级、高级、架构面试资料

AgentWeb 教程

JAVA herman 15549浏览 0评论
公告:“业余草”微信公众号 AI 中转站提供免费体验,点击链接 https://unity2.ai/register?ref=3XTnndN2 进行访问,支持 Claude、ChatGPT、Gemini 等最新模型!关注业余草微信公众号,添加作者微信:xttblog2!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
【腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

AgentWeb 是一个基于 Android 的 WebView 功能强大的组件库。在 WebView 性能和用户体验做了很多的优化,目前有网友开源在了 github 上。本文主要负责讲解它的一些简单的用法。

AgentWeb 介绍

AgentWeb 是一个基于的 Android WebView ,极度容易使用以及功能强大的库 。

AgentWeb

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

运行效果如下所示:

AgentWeb

调用 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 内部结构

AgentWeb

  • IndicatorController 进度条控制器
  • WebCreator 创建 WebView 。
  • WebSettings 统一设置 WebView 的 settings
  • WebSecurityController 安全控制器
  • JsEntraceAccess Js 方法入口

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » AgentWeb 教程