Files
jsswapp/app/src/main/java/com/sipai/jspatrol/Webv/GuideMenuActivity.java
2026-01-29 18:15:10 +08:00

516 lines
20 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.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<Uri> mUploadMessage;
private ValueCallback<Uri[]> 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<Uri> 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<Uri[]> 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<String, Void, Void> {
// 传递两个参数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<File>() {
@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");
}
}