From 88c323337b1b196dd3098c14c30de5725a21c4d3 Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期五, 22 五月 2020 19:02:09 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/endian11/DriveJudge --- app/src/main/java/safeluck/drive/evaluation/fragment/VPFragment.java | 103 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 94 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/VPFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/VPFragment.java index 886c096..b4725bb 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/VPFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/VPFragment.java @@ -1,15 +1,28 @@ package safeluck.drive.evaluation.fragment; +import android.os.Build; import android.os.Bundle; -import android.view.Gravity; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; + +import com.anyun.exam.lib.MyLog; +import com.tencent.smtt.export.external.interfaces.SslError; +import com.tencent.smtt.export.external.interfaces.SslErrorHandler; +import com.tencent.smtt.export.external.interfaces.WebResourceRequest; +import com.tencent.smtt.export.external.interfaces.WebResourceResponse; +import com.tencent.smtt.sdk.WebSettings; +import com.tencent.smtt.sdk.WebView; +import com.tencent.smtt.sdk.WebViewClient; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; import me.yokeyword.fragmentation.SupportFragment; @@ -29,19 +42,91 @@ return vpFragment; } + private String url = "http://192.168.40.202:9527/#/visitor/monitor?device_id=0314200100000002"; + private String url1 = "http://www.baidu.com"; + private static final String TAG = VPFragment.class.getCanonicalName(); + @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - TextView textView = new TextView(_mActivity); + hookWebView(); + WebView webView = new WebView(_mActivity); ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); - textView.setGravity(Gravity.CENTER); - textView.setLayoutParams(layoutParams); + webView.setLayoutParams(layoutParams); Bundle bundle = getArguments(); if (bundle != null){ - textView.setText(bundle.getString("argu")); - }else - textView.setText("kong"); - return textView; + }else{ + + } + WebSettings webSettings = webView.getSettings(); + + + webSettings.setDomStorageEnabled(true); + webSettings.setAppCacheMaxSize(1024*1024*8);//瀛樺偍鐨勬渶澶у閲� + String appCachePath = _mActivity.getCacheDir().getAbsolutePath(); + webSettings.setAppCachePath(appCachePath); + webSettings.setAllowFileAccess(true); + webSettings.setAppCacheEnabled(true); + webSettings.setJavaScriptEnabled(true); + webSettings.setJavaScriptCanOpenWindowsAutomatically(true); + webView.loadUrl(url); + webView.setWebViewClient(new WebViewClient(){ + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + view.loadUrl(url); + return true; + } + + @Override + public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { + super.onReceivedHttpError(view, request, errorResponse); + Log.i(TAG,errorResponse.getReasonPhrase()); + } + + @Override + public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) { + super.onReceivedSslError(webView, sslErrorHandler, sslError); + sslErrorHandler.proceed(); + } + }); + return webView; + } + public static void hookWebView() { + int sdkInt = Build.VERSION.SDK_INT; + try { + Class<?> factoryClass = Class.forName("android.webkit.WebViewFactory"); + Field field = factoryClass.getDeclaredField("sProviderInstance"); + field.setAccessible(true); + Object sProviderInstance = field.get(null); + if (sProviderInstance != null) { + MyLog.i("sProviderInstance isn't null"); + return; + } + Method getProviderClassMethod; + if (sdkInt > 22) { + getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass"); + } else if (sdkInt == 22) { + getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass"); + } else { + MyLog.i("Don't need to Hook WebView"); + return; + } + getProviderClassMethod.setAccessible(true); + Class<?> providerClass = (Class<?>) getProviderClassMethod.invoke(factoryClass); + Class<?> delegateClass = Class.forName("android.webkit.WebViewDelegate"); + Constructor<?> providerConstructor = providerClass.getConstructor(delegateClass); + if (providerConstructor != null) { + providerConstructor.setAccessible(true); + Constructor<?> declaredConstructor = delegateClass.getDeclaredConstructor(); + declaredConstructor.setAccessible(true); + sProviderInstance = providerConstructor.newInstance(declaredConstructor.newInstance()); + MyLog.i("sProviderInstance:{}", sProviderInstance); + field.set("sProviderInstance", sProviderInstance); + } + MyLog.i("Hook done!"); + } catch (Throwable e) { + MyLog.i(e); + } } } -- Gitblit v1.8.0