package com.web.dmcslot; import android.annotation.TargetApi; import android.content.ActivityNotFoundException; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.net.http.SslError; import android.os.Build; import android.os.Bundle; import android.os.Message; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import com.tencent.smtt.export.external.interfaces.ConsoleMessage; import com.tencent.smtt.export.external.interfaces.WebResourceRequest; import com.tencent.smtt.sdk.ValueCallback; import com.tencent.smtt.sdk.WebChromeClient; import com.tencent.smtt.sdk.WebSettings; import com.tencent.smtt.sdk.WebView; import com.tencent.smtt.sdk.WebViewClient; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Map; import com.web.dmcslot.appdown.AppUpdater; import com.web.dmcslot.appdown.UpdateConfig; import com.web.dmcslot.appdown.constant.Constants; import com.web.dmcslot.appdown.util.AppUtils; import com.web.dmcslot.appdown.util.NotificationUtils; public class WebView2Activity extends AppCompatActivity { private String url; WebView webView; ImageView show_top_v; ImageView menu_iv; private ImageView helpIv; private LinearLayout showTopLy; private FrameLayout videoContainer; private ImageView backIv; private ProgressBar progressBar; private View topVvvv; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { getWindow().setNavigationBarColor(getColor(R.color.white)); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); super.onCreate(savedInstanceState); View decor = getWindow().getDecorView(); getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.hide(); } setContentView(R.layout.activity_webview); findViewById(R.id.back_iv).setOnClickListener(view -> finish()); url = getIntent().getStringExtra("url"); initView(); } private ValueCallback mUploadCallbackForHighApi; public void initView() { topVvvv = (View) findViewById(R.id.top_vvvv); webView = findViewById(R.id.webview); show_top_v = findViewById(R.id.show_top_v); showTopLy = findViewById(R.id.show_top_ly); videoContainer = (FrameLayout) findViewById(R.id.videoContainer); backIv = (ImageView) findViewById(R.id.back_iv); progressBar = (ProgressBar) findViewById(R.id.progressbar); WebSettings settings = webView.getSettings(); settings.setDomStorageEnabled(true); settings.setAppCacheEnabled(true); settings.setCacheMode(WebSettings.LOAD_DEFAULT); settings.setJavaScriptEnabled(true); settings.setLoadWithOverviewMode(true); // 设置允许访问文件数据 settings.setAllowFileAccess(true); settings.setAllowContentAccess(true); settings.setDatabaseEnabled(true); settings.setSavePassword(false); settings.setSaveFormData(false); settings.setUseWideViewPort(true); settings.setBuiltInZoomControls(true); settings.setPluginState(WebSettings.PluginState.ON); settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); webView.setFocusable(true); webView.setFocusableInTouchMode(true); webView.getSettings().setSupportMultipleWindows(true); settings.setSupportZoom(false); webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); // webView.setHorizontalScrollbarOverlay(true); webView.setHorizontalScrollBarEnabled(true); webView.requestFocus(); // webView.setBackgroundColor(getColor(R.color.black)); settings.setJavaScriptCanOpenWindowsAutomatically(false); settings.setMediaPlaybackRequiresUserGesture(false); // 设置在WebView内部是否允许通过file url加载的 Js代码读取其他的本地文件 // Android 4.1前默认允许,4.1后默认禁止 settings.setAllowFileAccessFromFileURLs(true); // 设置WebView内部是否允许通过 file url 加载的 Javascript 可以访问其他的源(包括http、https等源) // Android 4.1前默认允许,4.1后默认禁止 settings.setAllowUniversalAccessFromFileURLs(true); // settings.setBuiltInZoomControls(false); // 启用缩放功能 // settings.setDisplayZoomControls(false); // 隐藏缩放控件 webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { WebView newWebView = new WebView(WebView2Activity.this); topVvvv.setVisibility(View.VISIBLE); webView.addView(newWebView); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(newWebView); resultMsg.sendToTarget(); newWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // isAtGame = true; progressBar.setVisibility(View.GONE); webView.loadUrl(url); return true; } }); // WebView newWebView = new WebView(view.getContext()); // newWebView.setWebViewClient(new WebViewClient() { // @Override // public boolean shouldOverrideUrlLoading(WebView view, String url) { // Intent browserIntent = new Intent(WebViewActivity.this, WebViewActivity.class); // browserIntent.putExtra("url", url); // startActivity(browserIntent); // return true; // } // }); // WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; // transport.setWebView(newWebView); // resultMsg.sendToTarget(); // return true; return true; } @Override public void onCloseWindow(WebView window) { super.onCloseWindow(window); } @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { LogUtils.d("consolemessage==" + consoleMessage.message()); return true; } @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); } }); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); showTopLy.setVisibility(View.GONE); progressBar.setVisibility(View.GONE); topVvvv.setVisibility(View.VISIBLE); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); progressBar.setVisibility(View.VISIBLE); topVvvv.setVisibility(View.VISIBLE); } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { Uri uri; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { uri = request.getUrl(); } else { uri = Uri.parse(request.toString()); } String url1 = uri.toString(); LogUtils.d("url1111111111==" + url1); if (url1.equals(url + "index") || url1.equals(url + "/index")) { topVvvv.setVisibility(View.GONE); } else { progressBar.setVisibility(View.VISIBLE); } if (!(url1.startsWith("http") || url1.startsWith("https"))) { try { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(url1)); startActivity(intent); return true; } catch (Exception e) { e.printStackTrace(); } } else { if ((url1.equals(url + "index") || url1.equals(url + "/index")) && webView.canGoBack()) { return false; } else { if (url1.contains(".apk")) { //下载 Toast.makeText(WebView2Activity.this, "下载开始,请稍后...", Toast.LENGTH_SHORT).show(); Constants.isUpdate = false; new AppUpdater(WebView2Activity.this, url1).start(); return false; } //其它的该怎么处理就怎么处理 LogUtils.d("url1111111111==2" + url1); webView.loadUrl(url1); return true; } } return false; } @Override public boolean shouldOverrideUrlLoading(WebView view, String url1) { if (url1.equals(url + "index") || url1.equals(url + "/index")) { topVvvv.setVisibility(View.GONE); } else { progressBar.setVisibility(View.VISIBLE); } if (!(url1.startsWith("http") || url1.startsWith("https"))) { try { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(url1)); startActivity(intent); return true; } catch (Exception e) { e.printStackTrace(); } } else { if ((url1.equals(url + "index") || url1.equals(url + "/index")) && webView.canGoBack()) { return false; } else { if (url1.contains(".apk")) { //下载 new AppUpdater(WebView2Activity.this, url1).start(); return false; } //其它的该怎么处理就怎么处理 webView.loadUrl(url1); return false; } } return false; } }); // webView.setOnTouchListener(new View.OnTouchListener() { // @Override // public boolean onTouch(View view, MotionEvent motionEvent) { // if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { // webView.loadUrl("javascript:_IntervalResize(+\" + view + \",false)"); // return true; // } else { // return false; // } // } // }); // webView.onWindowFocusChanged(true); // webView.setOnFocusChangeListener(new View.OnFocusChangeListener() { // @Override // public void onFocusChange(View view, boolean b) { // LogUtils.d("B==" + b); // view.invalidate(); // } // }); if (url != null) { webView.loadUrl(url); } } @Override public void onBackPressed() { if (webView.canGoBack()) {//当webview有多级能返回的时候 webView.goBack(); } else {//不能返回了 WebView2Activity.this.finish(); } } @Override protected void onDestroy() { if (webView != null) { //加载null内容 // webView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); //清除历史记录 // webView.clearHistory(); //移除WebView // ((ViewGroup) webView.getParent()).removeView(webView); //销毁VebView webView.destroy(); } super.onDestroy(); } }