package com.mytestapp;
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
import android.app.Activity;
|
import android.content.Intent;
|
import android.os.Bundle;
|
import android.util.Log;
|
import android.view.KeyEvent;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.webkit.JavascriptInterface;
|
import android.webkit.JsResult;
|
import android.webkit.WebChromeClient;
|
import android.webkit.WebSettings;
|
import android.webkit.WebView;
|
import android.webkit.WebViewClient;
|
import android.widget.Toast;
|
import android.widget.ZoomButtonsController;
|
import java.lang.reflect.Field;
|
import java.util.Date;
|
|
public class MainActivity extends BaseActivity {
|
private static final String TAG = "MainActivity";
|
private WebView webView;
|
private CrashMonitor crashMonitor = null;
|
|
|
@Override
|
public void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_main);
|
|
final ServerInfo serverInfo = ServerInfo.readServerInfo(MainActivity.this);
|
if(serverInfo == null){
|
|
}
|
webView = (WebView) findViewById(R.id.mywebview);
|
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
|
WebSettings webSettings = webView.getSettings();
|
webSettings.setJavaScriptEnabled(true);
|
webSettings.setBuiltInZoomControls(true);
|
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //不适用缓存
|
webView.clearCache(true);
|
|
webView.setBackgroundColor(android.R.color.transparent);
|
webView.setBackgroundResource(R.drawable.first_bg);
|
|
webView.loadUrl(serverInfo.createServerUrl());
|
webSettings.setDisplayZoomControls(false);
|
setZoomControlGone(webView);
|
webView.setWebViewClient(new MyWebViewClient());
|
|
webView.setWebChromeClient(new WebChromeClient(){
|
@Override
|
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
|
Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();
|
return true;
|
}
|
|
@Override
|
public void onProgressChanged(WebView view, int newProgress) {
|
super.onProgressChanged(view, newProgress);
|
|
if(newProgress == 100 ){
|
//加载完成
|
//Toast.makeText(MainActivity.this,"加载完成",Toast.LENGTH_SHORT).show();
|
}else{
|
//加载中
|
}
|
}
|
});
|
|
CrashHandler crashHandler = CrashHandler.getInstance();
|
crashHandler.init(MainActivity.this);
|
|
|
crashMonitor = CrashMonitor.createCrashMonitor();
|
webView.addJavascriptInterface(new HeartJavaScriptFunction() {
|
|
@JavascriptInterface
|
public void onJsFunctionCalled(int tag) {
|
if(crashMonitor != null){
|
if(2000 == tag){
|
crashMonitor.updateTimer(new Date().getTime());
|
}
|
//Log.e(TAG, "onJsFunctionCalled : "+tag );
|
if(!crashMonitor.isWorking()){
|
//Log.e(TAG, "onJsFunctionCalled: isWorking ................" );
|
crashMonitor.monitorPageCrashed(tag);
|
}
|
}
|
}
|
|
@JavascriptInterface
|
public void saveServerInfo(String server_ip,int server_port){
|
ServerInfo serverInfo1 = new ServerInfo();
|
serverInfo1.setServer_ip(server_ip);
|
serverInfo1.setServer_port(server_port);
|
ServerInfo.WriteServerInfo(MainActivity.this,serverInfo1);
|
}
|
|
@JavascriptInterface
|
public void reStartSystem(){
|
//Intent intent = new Intent(MainActivity.this,LoginActivity.class);
|
//startActivity(intent);
|
// 找到这个 webview
|
crashMonitor.destory();
|
crashMonitor = null;
|
// 加载一个空的url 或者content即可。
|
|
runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
if (webView != null) {
|
webView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
|
webView.clearHistory();
|
|
((ViewGroup) webView.getParent()).removeView(webView);
|
webView.destroy();
|
webView = null;
|
}
|
}
|
});
|
MainActivity.this.finish();
|
}
|
}, "Android");
|
crashMonitor.setOnCrashedListener(new CrashMonitor.OnCrashedListener() {
|
|
@Override
|
public void onCrashed() {
|
//Log.e(TAG, "onCrashed: 页面卡死进入登陆页面" );
|
Intent intent = new Intent(MainActivity.this,LoginActivity.class);
|
startActivity(intent);
|
}
|
});
|
|
}
|
|
@Override
|
protected void onDestroy() {
|
if (webView != null) {
|
webView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
|
webView.clearHistory();
|
|
((ViewGroup) webView.getParent()).removeView(webView);
|
webView.destroy();
|
webView = null;
|
}
|
super.onDestroy();
|
}
|
|
protected int getLayoutRes() {
|
return R.layout.activity_main;
|
}
|
|
/**
|
* 为了能够响应链接继续在本webview控件中显示,要声明此类。
|
* 如果没有这个类,点击了一个链接后,系统会自动选择浏览器浏览
|
*/
|
private class MyWebViewClient extends WebViewClient {
|
@Override
|
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
view.loadUrl(url);
|
return true;
|
}
|
|
}
|
|
/**
|
* 设置webview的后退,如果后退没有网页了,则关闭该activity
|
*/
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
|
webView.goBack();
|
return true;
|
}
|
return super.onKeyDown(keyCode, event);
|
}
|
|
/**
|
* 隐藏放大缩小控件
|
*/
|
public void setZoomControlGone(View view) {
|
Class classType;
|
Field field;
|
try {
|
classType = WebView.class;
|
field = classType.getDeclaredField("mZoomButtonsController");
|
field.setAccessible(true);
|
ZoomButtonsController mZoomButtonsController = new ZoomButtonsController(
|
view);
|
mZoomButtonsController.getZoomControls().setVisibility(View.GONE);
|
try {
|
field.set(view, mZoomButtonsController);
|
} catch (IllegalArgumentException e) {
|
e.printStackTrace();
|
} catch (IllegalAccessException e) {
|
e.printStackTrace();
|
}
|
} catch (SecurityException e) {
|
e.printStackTrace();
|
} catch (NoSuchFieldException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|