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

AgentWeb 教程

JAVA herman 13358浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信: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 教程