项目地址:/Justson/AgentWeb
AgentWeb 介绍
AgentWeb 是一个基于的 Android WebView ,极度容易使用以及功能强大的库,提供了 Android WebView 一系列的问题解决方案 ,并且轻量和极度灵活。
引入
-
Gradle
compile ':agentweb:4.0.2' // (必选) compile ':download:4.0.2' // (可选) compile ':filechooser:4.0.2'// (可选)
-
Maven
<dependency> <groupId></groupId> <artifactId>agentweb</artifactId> <version>4.0.2</version> <type>pom</type> </dependency>
使用
基础用法
mAgentWeb = (this) .setAgentWebParent((LinearLayout) view, new (-1, -1)) .useDefaultIndicator() .createAgentWeb() .ready() .go("");
-
调用 Javascript 方法拼接太麻烦 ? 请看 。
function callByAndroid(){ ("callByAndroid") } ().quickCallJs("callByAndroid");
-
Javascript 调 Java ?
().addJavaObject("android",new AndroidInterface(mAgentWeb,this)); ();
-
事件处理
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode, event)) { return true; } return (keyCode, event); }
-
跟随 Activity Or Fragment 生命周期 , 释放 CPU 更省电 。
@Override protected void onPause() { ().onPause(); (); } @Override protected void onResume() { ().onResume(); (); } @Override public void onDestroyView() { ().onDestroy(); (); }
-
全屏视频播放
<!--如果你的应用需要用到视频 , 那么请你在使用 AgentWeb 的 Activity 对应的清单文件里加入如下配置-->
android:hardwareAccelerated="true"
android:configChanges="orientation|screenSize"
-
定位
<!--AgentWeb 是默认允许定位的 ,如果你需要该功能 , 请在你的 AndroidManifest 文件里面加入如下权限 。-->
<uses-permission android:name=".ACCESS_FINE_LOCATION" />
<uses-permission android:name=".ACCESS_COARSE_LOCATION" />
-
WebChromeClient 与 WebViewClient
(this) .setAgentWebParent(mLinearLayout,new (-1,-1) ) .useDefaultIndicator() .setReceivedTitleCallback(mCallback) .setWebChromeClient(mWebChromeClient) .setWebViewClient(mWebViewClient) .setSecutityType() .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 (!()){ ().finish(); }
-
获取 WebView
().getWebView();
-
文件下载监听
protected DownloadListenerAdapter mDownloadListenerAdapter = new DownloadListenerAdapter() { @Override public boolean onStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength, extra) { (true) .setIcon(.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) { (url, downloadingService); mDownloadingService = downloadingService; (TAG, "onBindService:" + url + " DownloadingService:" + downloadingService); } @Override public void onUnbindService(String url, DownloadingService downloadingService) { (url, downloadingService); mDownloadingService = null; (TAG, "onUnbindService:" + url); } @Override public void onProgress(String url, long loaded, long length, long usedTime) { int mProgress = (int) ((loaded) / (length) * 100); (TAG, "onProgress:" + mProgress); (url, loaded, length, usedTime); } @Override public boolean onResult(String path, String url, Throwable throwable) { if (null == throwable) { //do you work } else { } return false; } };
-
查看 Cookies
String cookies=(targetUrl);
-
同步 Cookie
("","ID=XXXX");
-
MiddlewareWebChromeBase 支持多个 WebChromeClient
//略,请查看 Sample
-
MiddlewareWebClientBase 支持多个 WebViewClient
//略,请查看 Sample
-
清空缓存
(());
-
权限拦截
protected PermissionInterceptor mPermissionInterceptor = new PermissionInterceptor() { @Override public boolean intercept(String url, String[] permissions, String action) { (TAG, "url:" + url + " permission:" + permissions + " action:" + action); return false; } };
-
AgentWeb 完整用法
mAgentWeb = (this) .setAgentWebParent((LinearLayout) view, new (.MATCH_PARENT, .MATCH_PARENT)) .useDefaultIndicator(-1, 3) .setAgentWebWebSettings(getSettings()) .setWebViewClient(mWebViewClient) .setWebChromeClient(mWebChromeClient) .setPermissionInterceptor(mPermissionInterceptor) .setSecurityType(.STRICT_CHECK) .setAgentWebUIController(new UIController(getActivity())) .setMainFrameErrorView(.agentweb_error_page, -1) .useMiddlewareWebChrome(getMiddlewareWebChrome()) .useMiddlewareWebClient(getMiddlewareWebClient()) .setOpenOtherPageWays() .interceptUnkownUrl() .createAgentWeb() .ready() .go(getUrl());
-
AgentWeb 所需要的权限(在你工程中根据需求选择加入权限)
<uses-permission android:name=""></uses-permission>
<uses-permission android:name=".WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name=".READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name=".ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name=".ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name=".ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name=".READ_PHONE_STATE"></uses-permission>
<uses-permission android:name=".ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name=""></uses-permission>
<uses-permission android:name=".REQUEST_INSTALL_PACKAGES"></uses-permission>
-
AgentWeb 所依赖的库
compile ":design:${SUPPORT_LIB_VERSION}" // (3.0.0开始该库可选)
compile ":support-v4:${SUPPORT_LIB_VERSION}"
SUPPORT_LIB_VERSION=27.0.2(该值会更新)
混淆
如果你的项目需要加入混淆 , 请加入如下配置
-keep class .** { *; } -dontwarn .**
Java 注入类不要混淆 , 例如 sample 里面的 AndroidInterface 类 , 需要 Keep 。
-keepclassmembers class { *; }