新手一边做一边学,我也初次用这个,做个笔记
这东西相当于你自己的一个浏览器。比webview好处更多,比如原生下载功能,读写cookie和缓存,下拉刷新,JS和JAVA互相调用,事件处理,全屏视频播放等等功能,当然其它可以别出心裁地自行添加。
一个新事物,最关心的就是怎么简单使用了。
开源地址
https://github.com/Justson/AgentWeb
基础调用
private AgentWeb mAgentWeb; //本系统webview
private Activity mActivity;
private LinearLayout mLinearLayout;
mActivity=this;
mAgentWeb = AgentWeb.with(mActivity)
.setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))
.useDefaultIndicator()
.setWebChromeClient(mWebChromeClient)
.setWebViewClient(mWebViewClient)
.setMainFrameErrorView(R.layout.agentweb_error_page, -1)
.setSecurityType(AgentWeb.SecurityType.STRICT_CHECK)
.setWebLayout(new WebLayout(mActivity))
.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//打开其他应用时,弹窗咨询用户是否前往其他应用
.interceptUnkownUrl() //拦截找不到相关页面的Scheme
.createAgentWeb()
.ready()
.go("file:///android_asset/loadpage/loading.html");
切换网页可以这样
mAgentWeb.getUrlLoader().loadUrl("http://www.baidu.com");
jst和java互调,官方说的简单
java调用js很简单
<script>
function callByAndroid(){
console.log("callByAndroid")
}
</script>
mAgentWeb.getJsAccessEntrace().quickCallJs("callByAndroid");
js调用android就复杂一点点
首先
mAgentWeb.getJsInterfaceHolder().addJavaObject("android",new AndroidInterface(mAgentWeb,this));
//其中android可以改成其它字符
在js中调用类似这样
window.android.callAndroid();
在common有一个示例文件AndroidInterface.java里面有一个callAndroid()例 子
在此AndroidInterface.java文件里面加如下代码,网页js调用读取imei例 子
@JavascriptInterface
public String getimei() {
System.out.println("来自js用java:getimei");
return getIMEIDeviceId(context.getApplicationContext());
}
public static String getIMEIDeviceId(Context context) {
String deviceId;
//if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.P || BuildCompat.isAtLeastQ())
{
deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
} else {
final TelephonyManager mTelephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (context.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
return "";
}
}
assert mTelephony != null;
if (mTelephony.getDeviceId() != null)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
deviceId = mTelephony.getImei();
}else {
deviceId = mTelephony.getDeviceId();
}
} else {
deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
}
}
Log.d("deviceId", deviceId);
return deviceId;
}
然后网页端JS调用如下
<script>
if(window.android!=null && typeof(window.android)!="undefined"){
alert(window.android.getimei());
}
</script>
如此你看明白了吗? 不懂的可以交流。