Files
web_fengzhuang/Dmcslot/src/main/java/com/web/dmcslot/WebView2Activity.java
2025-02-06 17:39:24 +08:00

341 lines
13 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<Uri[]> 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();
}
}