|
|
@@ -1,474 +0,0 @@
|
|
|
-package com.sheep.gamegroup.view.activity;
|
|
|
-
|
|
|
-import android.annotation.SuppressLint;
|
|
|
-import android.app.Activity;
|
|
|
-import android.content.DialogInterface;
|
|
|
-import android.content.Intent;
|
|
|
-import android.graphics.Bitmap;
|
|
|
-import android.net.Uri;
|
|
|
-import android.os.Build;
|
|
|
-import android.os.Environment;
|
|
|
-import android.provider.MediaStore;
|
|
|
-import android.support.annotation.RequiresApi;
|
|
|
-import android.support.v7.app.ActionBar;
|
|
|
-import android.support.v7.app.AlertDialog;
|
|
|
-import android.text.TextUtils;
|
|
|
-import android.view.View;
|
|
|
-import android.webkit.ValueCallback;
|
|
|
-import android.webkit.WebChromeClient;
|
|
|
-import android.webkit.WebSettings;
|
|
|
-import android.webkit.WebView;
|
|
|
-import android.webkit.WebViewClient;
|
|
|
-
|
|
|
-import com.sheep.gamegroup.absBase.IJumpWeb;
|
|
|
-import com.sheep.gamegroup.util.CommonUtil;
|
|
|
-import com.sheep.gamegroup.util.LogUtil;
|
|
|
-import com.sheep.gamegroup.util.TestUtil;
|
|
|
-import com.sheep.gamegroup.util.ViewUtil;
|
|
|
-import com.sheep.gamegroup.util.js.BaseActWeb;
|
|
|
-import com.sheep.gamegroup.util.js.KFZSJs;
|
|
|
-import com.sheep.jiuyan.samllsheep.BuildConfig;
|
|
|
-import com.sheep.jiuyan.samllsheep.R;
|
|
|
-import com.sheep.jiuyan.samllsheep.utils.G;
|
|
|
-import com.sheep.jiuyan.samllsheep.utils.TitleBarUtils;
|
|
|
-import com.yalantis.ucrop.util.FileUtils;
|
|
|
-import com.zhy.http.okhttp.OkHttpUtils;
|
|
|
-import com.zhy.http.okhttp.callback.StringCallback;
|
|
|
-
|
|
|
-import java.io.File;
|
|
|
-import java.io.IOException;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.Map;
|
|
|
-
|
|
|
-import butterknife.BindView;
|
|
|
-import okhttp3.Call;
|
|
|
-
|
|
|
-
|
|
|
-/**
|
|
|
- * web页面--含有所有js及url后添加authorization
|
|
|
- * Created by zengjiebin on 2018/4/27.
|
|
|
- */
|
|
|
-public class ActWeb extends BaseActWeb {
|
|
|
-
|
|
|
- @BindView(R.id.webview)
|
|
|
- WebView mWebView;
|
|
|
-
|
|
|
- private String title;//title为空时,不显示整个标题栏
|
|
|
- private boolean needJsInteract;//是否需要js交互,有js交互的会对url进行操作:拼接token到后面
|
|
|
- private WebSettings webViewSettings;
|
|
|
-
|
|
|
- @Override
|
|
|
- protected int getLayoutId() {
|
|
|
- return R.layout.act_web;
|
|
|
- }
|
|
|
-
|
|
|
- @RequiresApi(api = Build.VERSION_CODES.KITKAT)
|
|
|
- @Override
|
|
|
- public void initView() {
|
|
|
- Intent intent = getIntent();
|
|
|
- String url = intent.getStringExtra(IJumpWeb.KEY_URL);
|
|
|
- title = intent.getStringExtra(IJumpWeb.KEY_TITLE);//title为空时,不显示整个标题栏
|
|
|
- needJsInteract = intent.getBooleanExtra(IJumpWeb.KEY_NEEDJSINTERACT, false);
|
|
|
- String jsUrl = intent.getStringExtra(IJumpWeb.KEY_JSURL);
|
|
|
- if (!TextUtils.isEmpty(url)) {
|
|
|
- url = url.trim();
|
|
|
- }
|
|
|
- TitleBarUtils
|
|
|
- .getInstance()
|
|
|
- .setTitle(this, TextUtils.isEmpty(title) ? "加载中" : title)
|
|
|
- .setTitleFinish(this);
|
|
|
- initWebViewSettings(mWebView);
|
|
|
- webViewSettings = mWebView.getSettings();
|
|
|
- webViewSettings.setJavaScriptCanOpenWindowsAutomatically(true);
|
|
|
- try {
|
|
|
- if (TestUtil.isTest())
|
|
|
- WebView.setWebContentsDebuggingEnabled(true);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
|
- webViewSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
|
|
|
- }
|
|
|
- if (TextUtils.isEmpty(jsUrl)) {
|
|
|
- loadUrl(url);
|
|
|
- } else {
|
|
|
- initJsData(url, jsUrl);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //初始化js代码数据
|
|
|
- private void initJsData(final String url, String jsUrl) {
|
|
|
- OkHttpUtils.get()
|
|
|
- .url(jsUrl)
|
|
|
- .build()
|
|
|
- .execute(new StringCallback() {
|
|
|
- @Override
|
|
|
- public void onError(Call call, Exception e, int id) {
|
|
|
- G.showToast(R.string.service_data_error);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onResponse(String response, int id) {
|
|
|
- js = response;
|
|
|
- loadUrl(url);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void initListener() {
|
|
|
- CommonUtil.getInstance().setDownloadListener(this, mWebView);
|
|
|
- }
|
|
|
-
|
|
|
- public static void initWebViewSettings(WebView webView) {
|
|
|
- webView.setClickable(true);
|
|
|
- WebSettings webSetting = webView.getSettings();
|
|
|
- webSetting.setJavaScriptEnabled(true);
|
|
|
- webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
|
|
|
- webSetting.setAllowFileAccess(true);
|
|
|
- webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
|
|
|
-// webSetting.setSupportZoom(true);
|
|
|
-// webSetting.setBuiltInZoomControls(true);
|
|
|
- webSetting.setUseWideViewPort(true);
|
|
|
- webSetting.setSupportMultipleWindows(true);
|
|
|
- // webSetting.setLoadWithOverviewMode(true);
|
|
|
- webSetting.setAppCacheEnabled(true);
|
|
|
- // webSetting.setDatabaseEnabled(true);
|
|
|
- webSetting.setDomStorageEnabled(true);
|
|
|
- webSetting.setGeolocationEnabled(true);
|
|
|
- webSetting.setAppCacheMaxSize(Long.MAX_VALUE);
|
|
|
- // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);
|
|
|
- webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
|
|
|
- // webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH);
|
|
|
- webSetting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
|
|
|
-
|
|
|
- // this.getSettingsExtension().setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);//extension
|
|
|
- // settings 的设计
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- protected void onDestroy() {
|
|
|
- super.onDestroy();
|
|
|
- if (mWebView != null) {
|
|
|
- mWebView.setVisibility(View.GONE);
|
|
|
- mWebView.removeAllViews();
|
|
|
- mWebView.destroy();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- *
|
|
|
- */
|
|
|
- public static final int INPUT_FILE_REQUEST_CODE = 1;
|
|
|
- private ValueCallback<Uri> mUploadMessage;
|
|
|
- private final static int FILECHOOSER_RESULTCODE = 2;
|
|
|
- private ValueCallback<Uri[]> mFilePathCallback;
|
|
|
-
|
|
|
- private String mCameraPhotoPath;
|
|
|
-
|
|
|
- private void loadUrl(final String url) {
|
|
|
-
|
|
|
- mWebView.setWebChromeClient(new WebChromeClient() {
|
|
|
- @Override
|
|
|
- public void onReceivedTitle(WebView view, String title) {
|
|
|
- super.onReceivedTitle(view, title);
|
|
|
- if (ActWeb.this.title == null)
|
|
|
- TitleBarUtils
|
|
|
- .getInstance()
|
|
|
- .setTitle(ActWeb.this, title);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
|
|
|
- if (mFilePathCallback != null) {
|
|
|
- mFilePathCallback.onReceiveValue(null);
|
|
|
- }
|
|
|
- mFilePathCallback = filePathCallback;
|
|
|
-
|
|
|
- /*PhotoPicker.builder()
|
|
|
- .setPhotoCount(1)
|
|
|
- .setShowCamera(true)
|
|
|
- .setShowGif(false)
|
|
|
- .setPreviewEnabled(true)
|
|
|
- .start(ActWeb.this, PhotoPicker.REQUEST_CODE);*/
|
|
|
- Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
|
|
- if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
|
|
|
- // Create the File where the photo should go
|
|
|
- File photoFile;
|
|
|
- photoFile = createImageFile();
|
|
|
- takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
|
|
|
-
|
|
|
- // Continue only if the File was successfully created
|
|
|
- if (photoFile != null) {
|
|
|
- mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();
|
|
|
- takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
|
|
|
- Uri.fromFile(photoFile));
|
|
|
- } else {
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
|
|
|
- contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
|
|
|
- contentSelectionIntent.setType("image/*");
|
|
|
-
|
|
|
- Intent[] intentArray;
|
|
|
- takePictureIntent = null;//步调用相机
|
|
|
- if (takePictureIntent != null) {
|
|
|
- intentArray = new Intent[]{takePictureIntent};
|
|
|
- } else {
|
|
|
- intentArray = new Intent[0];
|
|
|
- }
|
|
|
-
|
|
|
- Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
|
|
|
- chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
|
|
|
- chooserIntent.putExtra(Intent.EXTRA_TITLE, "图片选择");
|
|
|
- chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
|
|
|
-
|
|
|
- startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE);
|
|
|
-
|
|
|
- return /*super.onShowFileChooser(webView, filePathCallback, fileChooserParams)*/true;
|
|
|
- }
|
|
|
-
|
|
|
- //For Android 4.1
|
|
|
- public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
|
|
|
- mUploadMessage = uploadMsg;
|
|
|
- Intent i = new Intent(Intent.ACTION_GET_CONTENT);
|
|
|
- i.addCategory(Intent.CATEGORY_OPENABLE);
|
|
|
- i.setType("image/*");
|
|
|
- ActWeb.this.startActivityForResult(Intent.createChooser(i, "Image Chooser"), FILECHOOSER_RESULTCODE);
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onProgressChanged(WebView view, int newProgress) {
|
|
|
- if (newProgress == 100) {
|
|
|
- String action = "javascript:imgsrc('" + url + "')";
|
|
|
- runWebviewUrl(action);
|
|
|
- }
|
|
|
- super.onProgressChanged(view, newProgress);
|
|
|
- }
|
|
|
- });
|
|
|
- mWebView.setWebViewClient(new WebViewClient() {
|
|
|
- @Override
|
|
|
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
|
|
- LogUtil.println("ActWeb", "shouldOverrideUrlLoading", url);
|
|
|
- //微信H5支付核心代码
|
|
|
- if (url.startsWith("weixin://wap/pay?")) {
|
|
|
- try {
|
|
|
- Intent intent = new Intent();
|
|
|
- intent.setAction(Intent.ACTION_VIEW);
|
|
|
- intent.setData(Uri.parse(url));
|
|
|
- startActivity(intent);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return true;
|
|
|
- } else if (url.startsWith("alipays:") || url.startsWith("alipay")) {
|
|
|
- try {
|
|
|
- startActivity(new Intent("android.intent.action.VIEW", Uri.parse(url)));
|
|
|
- } catch (Exception e) {
|
|
|
- new AlertDialog.Builder(ActWeb.this)
|
|
|
- .setMessage("未检测到支付宝客户端,请安装后重试。")
|
|
|
- .setPositiveButton("立即安装", new DialogInterface.OnClickListener() {
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onClick(DialogInterface dialog, int which) {
|
|
|
- Uri alipayUrl = Uri.parse("https://d.alipay.com");
|
|
|
- startActivity(new Intent("android.intent.action.VIEW", alipayUrl));
|
|
|
- }
|
|
|
- }).setNegativeButton("取消", null).show();
|
|
|
- }
|
|
|
- return true;
|
|
|
- } else if (url.contains("17xmy.com")) {
|
|
|
- Map<String, String> extraHeaders = new HashMap<>();
|
|
|
- extraHeaders.put("Referer", "http://17xmy.com");
|
|
|
- view.loadUrl(url, extraHeaders);
|
|
|
- return true;
|
|
|
- } else if (url.contains("kfzs.com") || (url.startsWith("http://10.8.") && TestUtil.isDev())) {
|
|
|
- Map<String, String> extraHeaders = new HashMap<>();
|
|
|
- extraHeaders.put("Referer", "http://kfzs.com");
|
|
|
- view.loadUrl(url, extraHeaders);
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
|
|
- LogUtil.println("ActWeb", "onPageStarted", url);
|
|
|
- super.onPageStarted(view, url, favicon);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onPageFinished(WebView view, String url) {
|
|
|
- LogUtil.println("ActWeb", "onPageFinished", url);
|
|
|
- super.onPageFinished(view, url);
|
|
|
- imgReset();
|
|
|
- loadJs();
|
|
|
- }
|
|
|
- });
|
|
|
- webViewSettings.setJavaScriptEnabled(true);
|
|
|
- if (needJsInteract) {
|
|
|
- mWebView.addJavascriptInterface(new KFZSJs(this), "kfzsjs");
|
|
|
- String loadUrl = addUrlToken(url);
|
|
|
- LogUtil.println("ActWeb loadUrl = " + loadUrl);
|
|
|
- if (CommonUtil.getInstance().judgeUrlPicture(url)) {
|
|
|
- runWebviewUrl("file:///android_asset/loadImg.html");
|
|
|
- } else {
|
|
|
- mWebView.loadUrl(loadUrl);
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (CommonUtil.getInstance().judgeUrlPicture(url)) {
|
|
|
- runWebviewUrl("file:///android_asset/loadImg.html");
|
|
|
- } else {
|
|
|
- mWebView.loadUrl(url);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //在sdcard卡创建缩略图
|
|
|
- //createImageFileInSdcard
|
|
|
- @SuppressLint("SdCardPath")
|
|
|
- private File createImageFile() {
|
|
|
- //mCameraPhotoPath="/mnt/sdcard/tmp.png";
|
|
|
- File file = new File(Environment.getExternalStorageDirectory() + "/", "tmp.png");
|
|
|
- mCameraPhotoPath = file.getAbsolutePath();
|
|
|
- if (!file.exists()) {
|
|
|
- try {
|
|
|
- file.createNewFile();
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
- return file;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 是否响应返回键
|
|
|
- */
|
|
|
- private boolean responseBack = true;
|
|
|
-
|
|
|
- @Override
|
|
|
- public void onBackPressed() {
|
|
|
- if (responseBack)
|
|
|
- super.onBackPressed();
|
|
|
- else {
|
|
|
- loadJs("onBackPressed()");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void loadJs(String js) {
|
|
|
- ViewUtil.loadJs(mWebView, js);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void finish() {
|
|
|
- if (mWebView != null && mWebView.canGoBack()) {
|
|
|
- mWebView.goBack();
|
|
|
- return;
|
|
|
- }
|
|
|
- super.finish();
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
|
- if (requestCode == FILECHOOSER_RESULTCODE) {
|
|
|
- if (null == mUploadMessage) return;
|
|
|
- Uri result = data == null || resultCode != RESULT_OK ? null
|
|
|
- : data.getData();
|
|
|
- if (result != null) {
|
|
|
- String imagePath = FileUtils.getPath(this, result);
|
|
|
- if (!TextUtils.isEmpty(imagePath)) {
|
|
|
- result = Uri.parse("file:///" + imagePath);
|
|
|
- }
|
|
|
- }
|
|
|
- mUploadMessage.onReceiveValue(result);
|
|
|
- mUploadMessage = null;
|
|
|
- } else if (requestCode == INPUT_FILE_REQUEST_CODE && mFilePathCallback != null) {
|
|
|
- // 5.0的回调
|
|
|
- Uri[] results = null;
|
|
|
-
|
|
|
- // Check that the response is a good one
|
|
|
- if (resultCode == Activity.RESULT_OK) {
|
|
|
- if (data == null) {
|
|
|
- // If there is not data, then we may have taken a photo
|
|
|
- if (mCameraPhotoPath != null) {
|
|
|
- results = new Uri[]{Uri.parse(mCameraPhotoPath)};
|
|
|
- }
|
|
|
- } else {
|
|
|
- String dataString = data.getDataString();
|
|
|
- if (dataString != null) {
|
|
|
- results = new Uri[]{Uri.parse(dataString)};
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- mFilePathCallback.onReceiveValue(results);
|
|
|
- mFilePathCallback = null;
|
|
|
- } else {
|
|
|
- super.onActivityResult(requestCode, resultCode, data);
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private void imgReset() {
|
|
|
- ViewUtil.loadJs(mWebView, "(function(){" +
|
|
|
- "var objs = document.getElementsByTagName('img'); " +
|
|
|
- "for(var i=0;i<objs.length;i++) " +
|
|
|
- "{"
|
|
|
- + "var img = objs[i]; " +
|
|
|
- " img.style.maxWidth = '100%';" +
|
|
|
- "}" +
|
|
|
- "})()");
|
|
|
- }
|
|
|
-
|
|
|
- private void runWebviewUrl(final String url) {
|
|
|
- runOnUiThread(new Runnable() {
|
|
|
- @Override
|
|
|
- public void run() {
|
|
|
- if (mWebView != null && !TextUtils.isEmpty(url)) {
|
|
|
- mWebView.loadUrl(url);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- // 注入js函数监听
|
|
|
- public void loadJs() {
|
|
|
- if (TextUtils.isEmpty(js))
|
|
|
- return;
|
|
|
- ViewUtil.loadJs(mWebView, getJs());
|
|
|
- LogUtil.println("ActWeb", "loadJs", js);
|
|
|
- }
|
|
|
-
|
|
|
- private String js;
|
|
|
-
|
|
|
- private String getJs() {
|
|
|
- String testJsStart = "alert('成功注入');";
|
|
|
- return BuildConfig.DEBUG ? testJsStart + "\n" + js : js;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean isResponseBack() {
|
|
|
- return responseBack;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void setResponseBack(boolean responseBack) {
|
|
|
- this.responseBack = responseBack;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void clearWebView() {
|
|
|
- mWebView = null;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void showTitleBar(boolean isShow) {
|
|
|
- ActionBar actionBar = getSupportActionBar();
|
|
|
- if(actionBar != null)
|
|
|
- actionBar.hide();
|
|
|
- }
|
|
|
-}
|