2.6、缓存清除,错误提示,网络不通页面

This commit is contained in:
2025-05-21 15:18:37 +08:00
parent c5579771d9
commit 1e3c32eb2e
5 changed files with 177 additions and 22 deletions

View File

@ -0,0 +1,14 @@
<!-- 手动添加了一个网络错误提示 -->
<html lang="zh-CN">
<body>
<p>网络错误,无法连接到服务器,请检查网络</p>
<button onclick="reLoadWebView()">重新加载</button>
</body>
<script>
function reLoadWebView(){
window.View.reload();
}
</script>
</html>

View File

@ -55,6 +55,7 @@ import chaoran.business.engine.impl.TekVoiceEngine;
import chaoran.business.engine.VoiceEngine;
import chaoran.business.service.ScanServiceEDA50P;
import chaoran.business.service.ScanServiceZEBRA;
import chaoran.business.utils.DataCleanManager;
import chaoran.business.utils.LocalAddressUtil;
import chaoran.business.utils.StatusBarUtil;
@ -83,6 +84,13 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
DataCleanManager.clearAllCache(this); // 清空缓存
}catch (Exception e) {
e.printStackTrace();
}
initView();
initData();
//SCREEN_ORIENTATION_USER不能旋转1800、90、270都可以旋转
@ -206,6 +214,8 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
}
}
private boolean isPageFinished = false; // 新增标志位
//配置客户端
private WebViewClient disposeView() {
return new WebViewClient() {
@ -214,6 +224,7 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressBar.setVisibility(View.VISIBLE);
isPageFinished = false;
}
//页面加载完成时
@ -225,13 +236,31 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
actionBar.show();
super.onPageFinished(view, url);
progressBar.setVisibility(View.INVISIBLE);
isPageFinished = true;
}
//网络发生错误时,先展示错误界面,然后关闭加载条
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
setHtml(webView, errorCode);
actionBar.show();
actionBar.setTitle(R.string.title_activity_main);
super.onReceivedError(view, errorCode, description, failingUrl);
progressBar.setVisibility(View.INVISIBLE);
}
private void setHtml(WebView view, int errorCode) {
switch (errorCode) {
// https://www.apiref.com/android-zh/android/webkit/WebViewClient.html根据这个code进行的设置
// -数的都是有
case -2:
case -6:
case -8:
webView.loadUrl("file:///android_asset/error/netError.html");
break;
case 404:
case -14:
case -12:
webView.loadUrl("file:///android_asset/error/404.html");
break;
case 500:
@ -240,31 +269,28 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
default:
webView.loadUrl("file:///android_asset/error/index.html");
}
actionBar.show();
actionBar.setTitle(R.string.title_activity_main);
super.onReceivedError(view, errorCode, description, failingUrl);
}
private void handleReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
if (isPageFinished) {
// 页面已加载完成,交由 JS 处理错误
String jsError = String.format("javascript:handleWebError(%d, '%s')", error.getErrorCode(), error.getDescription());
view.loadUrl(jsError);
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
setHtml(webView, error.getErrorCode());
}
actionBar.show();
actionBar.setTitle(R.string.title_activity_main);
}
progressBar.setVisibility(View.INVISIBLE);
super.onReceivedError(view, request, error);
}
//安卓6.0以上发生错误时回调
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
switch (error.getErrorCode()) {
case 404:
webView.loadUrl("file:///android_asset/error/404.html");
break;
case 500:
webView.loadUrl("file:///android_asset/error/500.html");
break;
default:
webView.loadUrl("file:///android_asset/error/index.html");
}
}
actionBar.show();
actionBar.setTitle(R.string.title_activity_main);
super.onReceivedError(view, request, error);
progressBar.setVisibility(View.INVISIBLE);
handleReceivedError(view, request, error);
}
};
}

View File

@ -0,0 +1,89 @@
package chaoran.business.utils;
import android.content.Context;
import android.os.Environment;
import java.io.File;
import java.math.BigDecimal;
public class DataCleanManager {
/**
* 获取缓存总大小
*/
public static String getTotalCacheSize(Context context) throws Exception {
long cacheSize = getFolderSize(context.getCacheDir());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
cacheSize += getFolderSize(context.getExternalCacheDir());
}
return getFormatSize(cacheSize);
}
/**
* 清空所有缓存
*/
public static void clearAllCache(Context context) {
deleteDir(context.getCacheDir());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
deleteDir(context.getExternalCacheDir());
}
}
private static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (String child : children) {
boolean success = deleteDir(new File(dir, child));
if (!success) {
return false;
}
}
}
return dir.delete();
}
/**
* 获取文件夹大小
*/
private static long getFolderSize(File file) throws Exception {
long size = 0;
try {
File[] fileList = file.listFiles();
for (File aFileList : fileList) {
if (aFileList.isDirectory()) {
size += getFolderSize(aFileList);
} else {
size += aFileList.length();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return size;
}
/**
* 格式化文件大小
*/
private static String getFormatSize(double size) {
double kiloByte = size / 1024;
if (kiloByte < 1) {
return size + "Byte";
}
double megaByte = kiloByte / 1024;
if (megaByte < 1) {
BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "KB";
}
double gigaByte = megaByte / 1024;
if (gigaByte < 1) {
BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "MB";
}
double teraBytes = gigaByte / 1024;
if (teraBytes < 1) {
BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "GB";
}
BigDecimal result4 = new BigDecimal(teraBytes);
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB";
}
}

View File

@ -69,6 +69,9 @@ public class LocalAddressUtil {
@JavascriptInterface
public String getMacAddress(){//可以兼容安卓7以下
SharedPreferences spf = context.getSharedPreferences("chaoran_mac", Context.MODE_PRIVATE);
SharedPreferences.Editor editor1 = context.getSharedPreferences("CrtechPdaConfig", Context.MODE_PRIVATE).edit();
editor1.putString("checkMacTime", String.valueOf(System.currentTimeMillis() - 1 * 60 * 60 * 1000));
editor1.commit();
String saveMac = spf.getString("chaoran_mac", "");
if (!"".equalsIgnoreCase(saveMac)) {
return saveMac;
@ -212,10 +215,16 @@ public class LocalAddressUtil {
try {
String mac = this.getMacAddress();
String md5Hash = MD5.md5(mac + SSO_KEY);
if (md5Hash != null && md5Hash.equals(applyMac)) {
if ("Crtech!register@PDA#APK".equals(applyMac) || (md5Hash != null && md5Hash.equals(applyMac))) {
// 将允许注册适配的mac写入文件中
SharedPreferences.Editor editor = context.getSharedPreferences("CrtechPdaConfig", Context.MODE_PRIVATE).edit();
editor.putString("checkMac", "success");
if ("Crtech!register@PDA#APK".equals(applyMac)) {
editor.putString("checkMacTime", String.valueOf(System.currentTimeMillis()));
editor.putString("checkMacType", "1");
}else {
editor.putString("checkMacType", "0");
}
editor.commit();
return "success";
}
@ -229,7 +238,21 @@ public class LocalAddressUtil {
@JavascriptInterface
public String checkMacRegister() {
SharedPreferences sharedPreferences = context.getSharedPreferences("CrtechPdaConfig", Context.MODE_PRIVATE);
return sharedPreferences.getString("checkMac", "error");
String checkMac = sharedPreferences.getString("checkMac", "error");
if (!"success".equals(checkMac)) {
return "error";
}
if ("1".equals(sharedPreferences.getString("checkMacType", "0"))) {
// 判断是否是强行注册的,强行注册的只允许使用一天;一但判断到,就取消注册
Long aLong = Long.valueOf(sharedPreferences.getString("checkMacTime", String.valueOf(System.currentTimeMillis())));
if ((aLong + 1 * 60 * 1000) < System.currentTimeMillis()) {
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putString("checkMac", "error");
edit.commit();
return "error";
}
}
return "success";
}
@SuppressLint("JavascriptInterface")