package safeluck.drive.evaluation.fragment;
|
|
import android.os.Build;
|
import android.os.Bundle;
|
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.webkit.WebSettings;
|
import android.webkit.WebView;
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
|
import com.anyun.basecommonlib.MyLog;
|
|
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Field;
|
import java.lang.reflect.Method;
|
|
import me.yokeyword.fragmentation.SupportFragment;
|
|
/**
|
* MyApplication2
|
* Created by lzw on 2019/3/19. 16:55:04
|
* 邮箱:632393724@qq.com
|
* All Rights Saved! Chongqing AnYun Tech co. LTD
|
*/
|
public class VPFragment extends SupportFragment {
|
|
public static SupportFragment newInstance(String s){
|
VPFragment vpFragment = new VPFragment();
|
Bundle bundle = new Bundle();
|
bundle.putString("argu",s);
|
vpFragment.setArguments(bundle);
|
return vpFragment;
|
}
|
|
// private String url = "http://192.168.40.201:9527/#/visitor/monitor?device_id=0314200100000004";
|
private String url = "https://trainsim.aaej.cn/#/visitor/monitor?device_id=0314200100000004";
|
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) {
|
hookWebView();
|
WebView webView = new WebView(_mActivity);
|
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
|
webView.setLayoutParams(layoutParams);
|
Bundle bundle = getArguments();
|
if (bundle != null){
|
url = getArguments().getString("argu");
|
Log.i(TAG,"收到参数="+url);
|
}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);
|
|
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);
|
}
|
}
|
}
|