package com.sipai.jspatrol.Webv; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.webkit.URLUtil; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import com.sipai.jspatrol.R; import com.sipai.jspatrol.URL.MethodURL; import com.sipai.jspatrol.utils.AndroidFileUtil; import com.sipai.jspatrol.utils.FileProvider7; import com.sipai.jspatrol.utils.okHttpCookie.CookiesManager; import com.tencent.smtt.sdk.CookieManager; import com.tencent.smtt.sdk.CookieSyncManager; import com.tencent.smtt.sdk.DownloadListener; import com.tencent.smtt.sdk.MimeTypeMap; import com.tencent.smtt.sdk.ValueCallback; import com.tencent.smtt.sdk.WebChromeClient; import com.tencent.smtt.sdk.WebView; import com.tencent.smtt.sdk.WebViewClient; import org.xutils.x; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLDecoder; import cn.pedant.SweetAlert.SweetAlertDialog; public class GuideMenuActivity extends AppCompatActivity { private String url; private String name; private WebView webView; private SwipeRefreshLayout refresh; private SweetAlertDialog pDialog; private String cookies; private String fileabspath = ""; private ProgressDialog progressDialog; private ValueCallback mUploadMessage; private ValueCallback uploadMessage; // 用于5.0以上 final static int FILE_SELECTED = 4; public static final int REQUEST_SELECT_FILE = 100; public static void actionStart(Context context, String url, String name) { Intent intent = new Intent(context, GuideMenuActivity.class); intent.putExtra("url", url); intent.putExtra("name", name); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide_menu); init(); initView(); } private void initView() { TextView tv_title = (TextView) findViewById(R.id.moudle_back_title_tv_title); tv_title.setText(name); ImageView btn_back = (ImageView) findViewById(R.id.moudle_back_title_iv_back); btn_back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); pDialog = new SweetAlertDialog(this, SweetAlertDialog.PROGRESS_TYPE); pDialog.getProgressHelper().setBarColor(Color.parseColor("#00A0E9")); pDialog.setCancelable(true); pDialog.setCanceledOnTouchOutside(true); progressDialog = new ProgressDialog(this); webView = (WebView) findViewById(R.id.moudle_guide_menu_webview); webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setAllowFileAccess(true); webView.getSettings().setDomStorageEnabled(true); //设置自适应屏幕,两者合用 webView.getSettings().setUseWideViewPort(true); //将图片调整到适合webview的大小 webView.getSettings().setLoadWithOverviewMode(true); // 缩放至屏幕的大小 //缩放操作 webView.getSettings().setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。 webView.getSettings().setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放 webView.getSettings().setDisplayZoomControls(false); //隐藏原生的缩放控件 webView.getSettings().setDefaultTextEncodingName("utf-8"); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView webView, String s) { return super.shouldOverrideUrlLoading(webView, s); } @Override public void onPageStarted(WebView webView, String s, Bitmap bitmap) { super.onPageStarted(webView, s, bitmap); showMsgDialog(); } @Override public void onPageFinished(WebView webView, String s) { super.onPageFinished(webView, s); showMsgFinish(); } }); webView.setWebChromeClient(new WebChromeClient() { public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) { mUploadMessage = uploadMsg; if (mUploadMessage!=null) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); GuideMenuActivity.this.startActivityForResult( Intent.createChooser(intent, "完成操作需要使用"), FILE_SELECTED); } } @Override public boolean onShowFileChooser(WebView webView, ValueCallback valueCallback, FileChooserParams fileChooserParams) { if (uploadMessage != null) { uploadMessage.onReceiveValue(null); uploadMessage = null; } uploadMessage = valueCallback; if (uploadMessage!=null) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); GuideMenuActivity.this.startActivityForResult( Intent.createChooser(intent, "完成操作需要使用"), REQUEST_SELECT_FILE); } return true; } }); cookies = CookiesManager.getCookieText(this); synCookies(mServer, cookies); webView.loadUrl(mServer + MethodURL.PJ_Base + url); webView.setDownloadListener(new DownloadListener() { @Override public void onDownloadStart(final String url, String userAgent, final String contentDisposition, final String mimeType, final long contentLength) { runOnUiThread(new Runnable() { @Override public void run() { new SweetAlertDialog(GuideMenuActivity.this, SweetAlertDialog.NORMAL_TYPE) .setTitleText("下载附件?") .setConfirmText("确定") .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { @Override public void onClick(SweetAlertDialog sweetAlertDialog) { long caca = contentLength; Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); // downloadBySystem(url, contentDisposition, mimeType); sweetAlertDialog.dismissWithAnimation(); } }) .setCancelText("取消") .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() { @Override public void onClick(SweetAlertDialog sweetAlertDialog) { sweetAlertDialog.dismissWithAnimation(); } }) .show(); } }); } }); refresh = (SwipeRefreshLayout) findViewById(R.id.moudle_guide_menu_refresh); refresh.setColorSchemeResources(R.color.blue); refresh.setEnabled(false); refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { webView.loadUrl(mServer + MethodURL.PJ_Base + url); refresh.setRefreshing(false); } }); } private void downloadBySystem(String url, String contentDisposition, String mimeType) { // 设置下载文件保存的路径和文件名 String fileName = URLUtil.guessFileName(url, contentDisposition, mimeType); fileName = URLDecoder.decode(fileName); downloadFile(url, fileName, fileabspath); // new DownloadTask().execute(url, fileabspath+"/"+fileName); } private class DownloadTask extends AsyncTask { // 传递两个参数:URL 和 目标路径 private String url; private String destPath; @Override protected void onPreExecute() { // log.info("开始下载"); if (!GuideMenuActivity.this.isFinishing()) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(GuideMenuActivity.this, "开始下载", Toast.LENGTH_SHORT).show(); } }); } } @Override protected Void doInBackground(String... params) { if (!GuideMenuActivity.this.isFinishing()) { runOnUiThread(new Runnable() { @Override public void run() { progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMessage("下载中..."); progressDialog.show(); } }); } // log.debug("doInBackground. url:{}, dest:{}", params[0], params[1]); url = params[0]; destPath = params[1]; OutputStream out = null; HttpURLConnection urlConnection = null; try { URL url = new URL(params[0]); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(15000); urlConnection.setReadTimeout(15000); InputStream in = urlConnection.getInputStream(); out = new FileOutputStream(params[1]); byte[] buffer = new byte[10 * 1024]; int len; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } in.close(); } catch (IOException e) { // log.warn(e); } finally { if (urlConnection != null) { urlConnection.disconnect(); } if (out != null) { try { out.close(); } catch (IOException e) { // log.warn(e); } } } return null; } @Override protected void onPostExecute(Void aVoid) { // log.info("完成下载"); if (!GuideMenuActivity.this.isFinishing()) { Toast.makeText(GuideMenuActivity.this, "下载成功", Toast.LENGTH_SHORT).show(); progressDialog.dismiss(); } File file = new File(destPath); openThisFile(file); // Intent handlerIntent = new Intent(Intent.ACTION_VIEW); // String mimeType = getMIMEType(url); // Uri uri = Uri.fromFile(new File(destPath)); // handlerIntent.setDataAndType(uri, mimeType); // startActivity(handlerIntent); } } private String getMIMEType(String url) { String type = null; String extension = MimeTypeMap.getFileExtensionFromUrl(url); // log.debug("extension:{}", extension); if (extension != null) { type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); } return type; } private void downloadFile(String nowurl, String filename, String path) { File filep = new File(path); if (!filep.exists()) filep.mkdirs(); filep = null; progressDialog = new ProgressDialog(this); org.xutils.http.RequestParams requestParams = new org.xutils.http.RequestParams(nowurl); requestParams.setAutoRename(false); requestParams.setSaveFilePath(path +"/"+ filename); x.http().get(requestParams, new org.xutils.common.Callback.ProgressCallback() { @Override public void onWaiting() { } @Override public void onStarted() { if (!GuideMenuActivity.this.isFinishing()) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(GuideMenuActivity.this, "开始下载", Toast.LENGTH_SHORT).show(); } }); } } @Override public void onLoading(final long total, final long current, boolean isDownloading) { if (!GuideMenuActivity.this.isFinishing()) { runOnUiThread(new Runnable() { @Override public void run() { progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMessage("下载中..."); progressDialog.show(); progressDialog.setProgressNumberFormat(""); progressDialog.setMax((int) total); progressDialog.setProgress((int) current); } }); } } @Override public void onSuccess(File result) { if (!GuideMenuActivity.this.isFinishing()) { Toast.makeText(GuideMenuActivity.this, "下载成功", Toast.LENGTH_SHORT).show(); progressDialog.dismiss(); } //下载成功,file为下载好的文件 File file = result; // openFile(file); String name = file.getName(); String filepath = file.getPath(); String abso = file.getAbsolutePath(); openThisFile(file); } @Override public void onError(Throwable ex, boolean isOnCallback) { ex.printStackTrace(); if (!GuideMenuActivity.this.isFinishing()) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(GuideMenuActivity.this, "下载失败,请检查网络和SD卡", Toast.LENGTH_SHORT).show(); } }); } } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); // if (resultCode == RESULT_OK) { switch (requestCode) { case REQUEST_SELECT_FILE: // if (null == mUploadMessage) { // break; // } // Uri mResult = data == null || resultCode != RESULT_OK ? null // : data.getData(); // mUploadMessage.onReceiveValue(mResult); // mUploadMessage = null; if (uploadMessage == null) return; Uri result = (data == null || resultCode != RESULT_OK) ? null : data.getData(); if (result != null) { uploadMessage.onReceiveValue(new Uri[]{result}); } else { uploadMessage.onReceiveValue(new Uri[]{}); } uploadMessage = null; //每次置空是为了防止下次点击按钮选择图片无响应 break; case FILE_SELECTED: if (null == mUploadMessage) { break; } Uri mResult = data == null || resultCode != RESULT_OK ? null : data.getData(); mUploadMessage.onReceiveValue(mResult); mUploadMessage = null; break; } // }else { // // } } private static final int REQUEST_CHOOSEFILE = 1212; private void openThisFile(File file) { if (!file.exists()) { Toast.makeText(GuideMenuActivity.this, "文件不存在", Toast.LENGTH_SHORT).show(); } else { try { Uri fileUri = FileProvider7.getUriForFile(GuideMenuActivity.this, file); Intent in = AndroidFileUtil.openFile(file.getPath() + "", fileUri); startActivity(in); } catch (Exception e) { Toast.makeText(GuideMenuActivity.this, "文件打开失败", Toast.LENGTH_SHORT).show(); } } } private void showMsgFinish() { runOnUiThread(new Runnable() { @Override public void run() { pDialog.hide(); } }); } private void showMsgDialog() { runOnUiThread(new Runnable() { @Override public void run() { initDialog("页面加载中"); pDialog.show(); } }); } private void initDialog(String st) { pDialog.setTitleText(st); } public void synCookies(String url, String cookies) { CookieSyncManager.createInstance(getApplicationContext()); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); cookieManager.setCookie(url, cookies); CookieSyncManager.getInstance().sync(); } /** * 初始化 */ private String mServer; private String mUsername; private String mPassword; private String mUserid; private String mCaption; private String mBizid; public void init() { fileabspath = Environment.getExternalStorageDirectory() + "/" + getResources().getString(R.string.appflag) + "/" + getResources().getString(R.string.appflag) + "_FILE"; SharedPreferences sharedPre = getSharedPreferences("config", MODE_PRIVATE); mServer = sharedPre.getString("server", ""); mUsername = sharedPre.getString("username", ""); mPassword = sharedPre.getString("password", ""); mUserid = sharedPre.getString("userid", ""); mCaption = sharedPre.getString("caption", ""); mBizid = sharedPre.getString("bizid", ""); url = getIntent().getStringExtra("url"); name = getIntent().getStringExtra("name"); } }