public class AdWebView extends com.github.lzyzsd.jsbridge.BridgeWebView {
private Context mContext;
private MoonthimpModel moonthimpModel;
private boolean messageHeight;
private String mTitle;
private PregressChange pregressChange;
public AdWebView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AdWebView);
messageHeight = a.getBoolean(
R.styleable.AdWebView_messageHeight, false);
}
public void setPregressChange(PregressChange pregressChange) {
this.pregressChange = pregressChange;
}
public AdWebView(Context context) {
super(context);
this.mContext = context;
}
Mobile mobile = new Mobile();
public void initWebView(String url) {
WebSettings webSettings = getSettings();
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
webSettings.setJavaScriptEnabled(true);
//设置自适应屏幕,两者合用
webSettings.setDomStorageEnabled(true);
// 解决Android 5.0上Webview默认不允许加载Http与Https混合内容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//两者都可以
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true);// 缩放至屏幕的大小
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true);//支持自动加载图片
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
addJavascriptInterface(this, "Android_kks");
if (messageHeight) {
addJavascriptInterface(mobile, "mobile");
}
if (Build.VERSION.SDK_INT >= 19) {
getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
}
//设置不用系统浏览器打开,直接显示在当前Webview
setWebViewClient(new BridgeWebViewClient(this) {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
LogUtils.e("onPageFinished");
if (messageHeight) {
mobile.onGetWebContentHeight();
}
}
@Override
public void onReceivedSslError(WebView view,
SslErrorHandler handler, SslError error) {
// super.onReceivedSslError(view, handler, error); 父类的默认处理方式,内部是handler.cancel(),必须去除
handler.proceed();// 接受所有网站的证书
// handleMessage(Message msg);// 进行其他处理
}
});
setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (pregressChange != null) {
if (newProgress == 100) {
//加载完毕进度条消失
pregressChange.onComplete();
} else {
//更新进度
pregressChange.onProgress(newProgress);
}
}
super.onProgressChanged(view, newProgress);
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
if (title != null && pregressChange != null) {
// pregressChange.onTitle(title);
}
}
});
loadUrl(url);
// loadUrl("https://h5.ruiccm.com/testls/190627/index.html");
// loadUrl("file:///android_asset/demo1.html");
String localVersion = "";
try {
PackageInfo packageInfo = KeKeShiApp.getApp()
.getPackageManager()
.getPackageInfo(KeKeShiApp.getApp().getPackageName(), 0);
localVersion = packageInfo.versionName;
LogUtils.d("TAG", "本软件的版本号。。" + localVersion);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
AdUserInfoBean src = new AdUserInfoBean();
src.setDevice_uuid(PushAgent.getInstance(mContext).getRegistrationId());
if (AppSharedPrefs.getUserInfo() != null && AppSharedPrefs.getUserInfo().getUserinfo() != null && AppSharedPrefs.getUserInfo().getUserinfo().getTel() != null) {
UserBean.UserInfo userinfo = AppSharedPrefs.getUserInfo().getUserinfo();
src.setPhoneNum(userinfo.getTel());
src.setBabybirthday(userinfo.getBabybirthday());
src.setBabyname(userinfo.getBabyname());
src.setBabysex(userinfo.getBabysex());
src.setIsvip((AppSharedPrefs.getUserInfo().getIsvip() ? 1 : 0) + "");
src.setMoonage(userinfo.getMoonage());
src.setRelative(userinfo.getRelative());
src.setUser_uuid(userinfo.getUuid());
}
src.setDeviceid(PushAgent.getInstance(mContext).getRegistrationId());
src.setVersion(localVersion);
src.setPhone_type("Android");
src.setPhone_version(SystemUtil.getSystemModel() + "," + SystemUtil.getSystemVersion());
//有方法名的都需要注册Handler后使用
registerHandler("userInfo", new BridgeHandler() {
@Override
public void handler(String data, CallBackFunction function) {
Log.i("liuw", "html返回数据为:" + data);
function.onCallBack("Native已经接收到数据:" + data + ",请确认!");
}
});
//应用启动后初始化数据调用,js处理方法connectWebViewJavascriptBridge(function(bridge)
callHandler("userInfo", new Gson().toJson(src), new CallBackFunction() {
@Override
public void onCallBack(String data) {
Log.e("callbace", "successs");
}
});
}
public String getmTitle() {
return mTitle;
}
private class Mobile {
@JavascriptInterface
public void onGetWebContentHeight() {
post(new Runnable() {
@Override
public void run() {
measure(0, 0);
int measuredHeight = getMeasuredHeight();
LogUtils.d("measuredHeight", measuredHeight + "");
SharedPreferences kekeshi = mContext.getSharedPreferences("kekeshi", MODE_PRIVATE);
if (measuredHeight != 0) {
kekeshi.edit().putInt("measuredHeight", measuredHeight).commit();
}
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) getLayoutParams();
params.height = measuredHeight;
if (measuredHeight == 0) {
int measuredHeight1 = kekeshi.getInt("measuredHeight", 4000);
params.height = measuredHeight1;
}
params.weight = LinearLayout.LayoutParams.MATCH_PARENT;
setLayoutParams(params);
}
});
}
}
public void close() {
stopLoading();
clearHistory();
removeAllViews();
destroy();
}
public void resume() {
// resumeTimers();
// onResume();
}
public void pause() {
// onPause();
// pauseTimers();
}
public void load(String url) {
initWebView(url);
}
public interface PregressChange {
void onComplete();
void onProgress(int progress);
void onTitle(String title);
}