一、AgentWeb介绍
AgentWeb 是一个基于的 Android WebView ,极度容易使用以及功能强大的库,提供了 Android WebView 一系列的问题解决方案 ,并且轻量和极度灵活
二、AgentWeb 功能
三、AgentWeb与WebView对比:
Web | 文件下载 | 文件上传 | Js通信 | 断点续传 | 使用简易度 | 进度条 | 线程安全 |
---|---|---|---|---|---|---|---|
WebView | 不支持 | 不支持 | 支持 | 不支持 | 麻烦 | 没有 | 不安全 |
AgentWeb | 支持 | 支持 | 更简洁 | 支持 | 简洁 | 有 | 安全 |
四、简单的AgentWeb的使用
2、项目:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.myapplication3.sample.activity.WebActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:actionBarSize"
android:background="?attr/colorPrimary"
android:titleTextColor="@android:color/white"
app:theme="@style/toolBar"
app:titleTextColor="@android:color/white">
<TextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:singleLine="true"
android:textColor="@android:color/white"
android:textSize="14sp"/>
</androidx.appcompat.widget.Toolbar>
</LinearLayout>
public class BaseWebActivity extends AppCompatActivity {
protected AgentWeb mAgentWeb;
private LinearLayout mLinearLayout;
private Toolbar mToolbar;
private TextView mTitleTextView;
private AlertDialog mAlertDialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
mLinearLayout = (LinearLayout) this.findViewById(R.id.container);
mToolbar = (Toolbar) this.findViewById(R.id.toolbar);
mToolbar.setTitleTextColor(Color.WHITE);
mToolbar.setTitle("");
mTitleTextView = (TextView) this.findViewById(R.id.toolbar_title);
this.setSupportActionBar(mToolbar);
if (getSupportActionBar() != null) {
// Enable the Up button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog();
}
});
long p = System.currentTimeMillis();
mAgentWeb = AgentWeb.with(this)
.setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))
.useDefaultIndicator()
.setWebChromeClient(mWebChromeClient)
.setWebViewClient(mWebViewClient)
.setMainFrameErrorView(com.just.agentweb.R.layout.agentweb_error_page, -1)
.setSecurityType(AgentWeb.SecurityType.STRICT_CHECK)
.setWebLayout(new WebLayout(this))
.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//打开其他应用时,弹窗咨询用户是否前往其他应用
.interceptUnkownUrl() //拦截找不到相关页面的Scheme
.createAgentWeb()
.ready()
.go(getUrl());
//mAgentWeb.getUrlLoader().loadUrl(getUrl());
long n = System.currentTimeMillis();
Log.i("Info", "init used time:" + (n - p));
}
private WebViewClient mWebViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
//do you work
Log.i("Info", "BaseWebActivity onPageStarted");
}
};
private WebChromeClient mWebChromeClient = new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
if (mTitleTextView != null) {
mTitleTextView.setText(title);
}
}
};
public String getUrl() {
return "https://m.jd.com/";
}
private void showDialog() {
if (mAlertDialog == null) {
mAlertDialog = new AlertDialog.Builder(this)
.setMessage("您确定要关闭该页面吗?")
.setNegativeButton("再逛逛", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mAlertDialog != null) {
mAlertDialog.dismiss();
}
}
})//
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (mAlertDialog != null) {
mAlertDialog.dismiss();
}
BaseWebActivity.this.finish();
}
}).create();
}
mAlertDialog.show();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (mAgentWeb.handleKeyEvent(keyCode, event)) {
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onPause() {
mAgentWeb.getWebLifeCycle().onPause();
super.onPause();
}
@Override
protected void onResume() {
mAgentWeb.getWebLifeCycle().onResume();
super.onResume();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("Info", "onResult:" + requestCode + " onResult:" + resultCode);
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onDestroy() {
super.onDestroy();
//mAgentWeb.destroy();
mAgentWeb.getWebLifeCycle().onDestroy();
}
}
WebLayout.java
public class WebLayout implements IWebLayout {
private Activity mActivity;
private final TwinklingRefreshLayout mTwinklingRefreshLayout;
private WebView mWebView = null;
public WebLayout(Activity activity) {
this.mActivity = activity;
mTwinklingRefreshLayout = (TwinklingRefreshLayout) LayoutInflater.from(activity).inflate(R.layout.fragment_twk_web, null);
mTwinklingRefreshLayout.setPureScrollModeOn();
mWebView = (WebView) mTwinklingRefreshLayout.findViewById(R.id.webView);
}
@NonNull
@Override
public ViewGroup getLayout() {
return mTwinklingRefreshLayout;
}
@Nullable
@Override
public WebView getWebView() {
return mWebView;
}
}
<?xml version="1.0" encoding="utf-8"?>
<com.lcodecore.tkrefreshlayout.TwinklingRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
app:tr_pureScrollMode_on="true">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:visibility="visible"
android:overScrollMode="never"/>
</com.lcodecore.tkrefreshlayout.TwinklingRefreshLayout>
WebActivity.kt
class WebActivity : BaseWebActivity(){
override fun getUrl(): String? {
return super.getUrl()
}
override fun onStart() {
super.onStart()
}
override fun onResume() {
super.onResume()
//测试Cookies
/*try {
String targetUrl="";
Log.i("Info","cookies:"+ AgentWebConfig.getCookiesByUrl(targetUrl="http://www.jd.com"));
AgentWebConfig.removeAllCookies(new ValueCallback<Boolean>() {
@Override
public void onReceiveValue(Boolean value) {
Log.i("Info","onResume():"+value);
}
});
String tagInfo=AgentWebConfig.getCookiesByUrl(targetUrl);
Log.i("Info","tag:"+tagInfo);
AgentWebConfig.syncCookie("http://www.jd.com","ID=IDHl3NVU0N3ltZm9OWHhubHVQZW1BRThLdGhLaFc5TnVtQWd1S2g1REcwNVhTS3RXQVFBQEBFDA984906B62C444931EA0");
String tag=AgentWebConfig.getCookiesByUrl(targetUrl);
Log.i("Info","tag:"+tag);
AgentWebConfig.removeSessionCookies();
Log.i("Info","removeSessionCookies:"+AgentWebConfig.getCookiesByUrl(targetUrl));
} catch (Exception e){
e.printStackTrace();
}*/
}
}
MainActivity.kt
val intent= Intent(this, WebActivity::class.java)
implementation 'com.just.agentweb:agentweb-androidx:4.1.4'
implementation 'com.lcodecorex:tkrefreshlayout:1.0.7'
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
原文地址:https://blog.csdn.net/qq_35091074/article/details/121961880
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_12783.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。