package com.example.informationkanban; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.PixelFormat; import android.net.Uri; import android.os.Bundle; import android.text.InputType; import android.text.TextUtils; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.webkit.JavascriptInterface; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import com.example.informationkanban.dialog.UrlConfigDialogHelper; import com.example.informationkanban.utils.AppUtil; import com.example.informationkanban.utils.GetInformationUtils; import com.example.informationkanban.utils.LocaleMangerUtils; import com.example.informationkanban.utils.NetFunctionConfig; import com.tencent.smtt.export.external.interfaces.GeolocationPermissionsCallback; import com.tencent.smtt.export.external.interfaces.JsPromptResult; import com.tencent.smtt.export.external.interfaces.JsResult; import com.tencent.smtt.export.external.interfaces.WebResourceRequest; import com.tencent.smtt.export.external.interfaces.WebResourceResponse; import com.tencent.smtt.sdk.ValueCallback; public class TBSMainActivity extends AppCompatActivity { private String TAG = TBSMainActivity.class.getSimpleName(); private com.tencent.smtt.sdk.WebView webView; private long clickTime = 0; private String MAC = ""; @Override protected void onCreate(Bundle savedInstanceState) { int languageId = NetFunctionConfig.getLanguageId(this); LocaleMangerUtils.setApplicationLanguageByIndex(this, languageId); super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(R.layout.tbs_activity_main); init(); MAC = GetInformationUtils.getIMEI(this); String url = NetFunctionConfig.getCBDUrl(); if (BuildConfig.type.equalsIgnoreCase("s64_ldjc")) { url = NetFunctionConfig.getCBDS64Url(); } else if (BuildConfig.type.equalsIgnoreCase("s65_shzy")) { url = NetFunctionConfig.getWdklS65Url(); } else if (BuildConfig.type.equalsIgnoreCase("s64_wxh")) { url = NetFunctionConfig.getWxhUrl(); } if (TextUtils.isEmpty(url)) { //url为空则需要手动配置 UrlConfigDialogHelper.showDialog(TBSMainActivity.this); } else { accessTheWebpage(); } } @Override protected void onResume() { super.onResume(); View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } private void init() { //获得控件 webView = findViewById(R.id.tbs_webview); } private void accessTheWebpage() { webView.setInitialScale(100);//设置缩放比例 com.tencent.smtt.sdk.WebSettings settings = webView.getSettings(); settings.setJavaScriptCanOpenWindowsAutomatically(true);//设置js可以直接打开窗口,如window.open(),默认为false settings.setJavaScriptEnabled(true);//是否允许执行js,默认为false。设置true时,会提醒可能造成XSS漏洞 settings.setSupportZoom(true);//是否可以缩放,默认true settings.setBuiltInZoomControls(false);//是否显示缩放按钮,默认false settings.setUseWideViewPort(true);//设置此属性,可任意比例缩放。大视图模式 settings.setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题 settings.setAppCacheEnabled(false);//是否使用缓存 settings.setCacheMode(WebSettings.LOAD_NO_CACHE); settings.setDomStorageEnabled(true);//DOM Storage settings.setMediaPlaybackRequiresUserGesture(false); initWebViewClient(); initWebChromeClient(); initJavaScriptInterface(); //String myUrl = "192.168.1.196:8080"; String myUrl; if (BuildConfig.type.equalsIgnoreCase("s65_shzy")) { myUrl = NetFunctionConfig.getWdklS65Url(); } else if (BuildConfig.type.equalsIgnoreCase("s64_ldjc")) { myUrl = NetFunctionConfig.getCBDS64Url() + MAC; } else if (BuildConfig.type.equalsIgnoreCase("s64_wxh")) { myUrl = NetFunctionConfig.getWxhUrl(); } else { //都要带token myUrl = NetFunctionConfig.getCBDUrl() + MAC; } Toast.makeText(TBSMainActivity.this, "正在加载数据,请稍后...", Toast.LENGTH_LONG).show(); webView.loadUrl(myUrl); /*webView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { Log.e(TAG, "webview onkey: " + event.getKeyCode() + ", " + event.getAction() + ", can back: " + webView.canGoBack() + ", can forward: " + webView.canGoForward()); if (event.getAction() == KeyEvent.ACTION_DOWN) { if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT && webView.canGoBack()) { //遥控器左键 webView.goBack(); return true; } else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT && webView.canGoForward()) { //遥控器右键 webView.goForward(); return true; } } return false; } });*/ } private void initWebViewClient() { webView.setWebViewClient(new com.tencent.smtt.sdk.WebViewClient() { /** * 具体接口使用细节请参考文档: * https://x5.tencent.com/docs/webview.html * 或 Android WebKit 官方: * https://developer.android.com/reference/android/webkit/WebChromeClient */ @Override public boolean shouldOverrideUrlLoading(com.tencent.smtt.sdk.WebView webView, String s) { //使用WebView加载显示url webView.loadUrl(s); //返回true return true; } @Override public void onPageStarted(com.tencent.smtt.sdk.WebView view, String url, Bitmap favicon) { Log.i(TAG, "onPageStarted, view:" + view + ", url:" + url); } @Override public void onPageFinished(com.tencent.smtt.sdk.WebView view, String url) { Log.i(TAG, "onPageFinished, view:" + view + ", url:" + url); } @Override public void onReceivedError(com.tencent.smtt.sdk.WebView webView, int errorCode, String description, String failingUrl) { Log.e(TAG, "onReceivedError: " + errorCode + ", description: " + description + ", url: " + failingUrl); } @Override public WebResourceResponse shouldInterceptRequest(com.tencent.smtt.sdk.WebView webView, WebResourceRequest webResourceRequest) { /*if (webResourceRequest.getUrl().toString().contains("debugdebug")) { InputStream in = null; Log.i("AterDebug", "shouldInterceptRequest"); try { in = new FileInputStream(new File("/sdcard/1.png")); } catch (Exception e) { } return new WebResourceResponse("image/*", "utf-8", in); } else { return super.shouldInterceptRequest(webView, webResourceRequest); }*/ return super.shouldInterceptRequest(webView, webResourceRequest); } }); } private void initWebChromeClient() { final Context context = this; final Activity activity = this; webView.setWebChromeClient(new com.tencent.smtt.sdk.WebChromeClient() { /** * 具体接口使用细节请参考文档: * https://x5.tencent.com/docs/webview.html * 或 Android WebKit 官方: * https://developer.android.com/reference/android/webkit/WebChromeClient */ @Override public void onProgressChanged(com.tencent.smtt.sdk.WebView view, int newProgress) { Log.i(TAG, "onProgressChanged, newProgress:" + newProgress + ", view:" + view); } @Override public boolean onJsAlert(com.tencent.smtt.sdk.WebView webView, String url, String message, JsResult result) { /*new AlertDialog.Builder(context).setTitle("JS弹窗Override") .setMessage(message) .setPositiveButton("OK", (dialogInterface, i) -> result.confirm()) .setCancelable(false) .show();*/ return true; } @Override public boolean onJsConfirm(com.tencent.smtt.sdk.WebView webView, String url, String message, JsResult result) { /*new AlertDialog.Builder(context).setTitle("JS弹窗Override") .setMessage(message) .setPositiveButton("OK", (dialogInterface, i) -> result.confirm()) .setNegativeButton("Cancel", (dialogInterface, i) -> result.cancel()) .setCancelable(false) .show();*/ return true; } @Override public boolean onJsBeforeUnload(com.tencent.smtt.sdk.WebView webView, String url, String message, JsResult result) { /*new AlertDialog.Builder(context).setTitle("页面即将跳转") .setMessage(message) .setPositiveButton("OK", (dialogInterface, i) -> result.confirm()) .setNegativeButton("Cancel", (dialogInterface, i) -> result.cancel()) .setCancelable(false) .show();*/ return true; } @Override public boolean onJsPrompt(com.tencent.smtt.sdk.WebView webView, String url, String message, String defaultValue, JsPromptResult result) { /*final EditText input = new EditText(context); input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); new AlertDialog.Builder(context).setTitle("JS弹窗Override") .setMessage(message) .setView(input) .setPositiveButton("OK", (dialogInterface, i) -> result.confirm(input.getText().toString())) .setCancelable(false) .show();*/ return true; } @Override public boolean onShowFileChooser(com.tencent.smtt.sdk.WebView webView, ValueCallback filePathCallback, com.tencent.smtt.sdk.WebChromeClient.FileChooserParams fileChooserParams) { Log.i(TAG, "openFileChooser: " + fileChooserParams.getMode()); //mFilePathCallback = filePathCallback; //openFileChooseProcess(fileChooserParams.getMode() == FileChooserParams.MODE_OPEN_MULTIPLE); return true; } @Override public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissionsCallback geolocationPermissionsCallback) { /*if (verifyLocationPermissions(activity)) { geolocationPermissionsCallback.invoke(origin, true, false); } else { locationPermissionUrl = origin; mGeolocationCallback = geolocationPermissionsCallback; }*/ } }); } private void initJavaScriptInterface() { final Activity context = this; webView.addJavascriptInterface(new WebViewJavaScriptFunction() { @Override public void onJsFunctionCalled(String tag) { } @JavascriptInterface public void openQRCodeScan() { // } @JavascriptInterface public void openDebugX5() { //webView.loadUrl("http://debugx5.qq.com"); } @JavascriptInterface public void openWebkit() { // } }, "Android"); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (webView != null && webView.canGoBack()) { webView.goBack(); return true; } long currentTime = System.currentTimeMillis(); // 3秒内连按两次后退按钮,退出应用 if (currentTime - clickTime < 3000) { finish(); } else { Toast.makeText(getApplicationContext(), "再按一次返回键退出", Toast.LENGTH_SHORT).show(); clickTime = currentTime; } return true; } return super.onKeyDown(keyCode, event); } //销毁Webview @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; }*/ if (webView != null) { webView.destroy(); } super.onDestroy(); } }