2.6、缓存清除,错误提示,网络不通页面
This commit is contained in:
@ -11,7 +11,7 @@ android {
|
||||
minSdk 28
|
||||
targetSdk 28
|
||||
versionCode 1
|
||||
versionName "2.5"
|
||||
versionName "2.6"
|
||||
|
||||
// 1.0 IDATA广播模式处理
|
||||
// 1.1 霍尼韦尔的监听修改(扫描网站二维码跳出程序,监听失效,调整)、斑马PDA广播模式设置
|
||||
@ -38,6 +38,9 @@ android {
|
||||
// 2.3 适配IOT_Device:sc55g PDA 广播模式
|
||||
// 2.4 适配 qualcomm:mc50 PDA 广播模式
|
||||
// 2.5 mac地址存储文件(mac获取失败就随机一个);监听返回按键,提示是否退出程序的提示窗口
|
||||
// 2.6 1、打开程序的时候清空缓存(为了程序更新的时候,不被缓存影响,不用手动清除、出现了用户手动清除的时候吧存储空间清除了);
|
||||
// 2、判断是否初始化成功(webview成功),如果已经加载完毕,那么apk不在拦截,调用js的方法让BS进行处理提示
|
||||
// 3、根据官方文档,将code的判断进行修改,添加了一个网络错误的页面进行提示(并且添加了一个重新加载的按钮,执行webview重新加载)
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
ndk {
|
||||
abiFilters 'armeabi-v7a'
|
||||
|
||||
14
app/src/main/assets/error/netError.html
Normal file
14
app/src/main/assets/error/netError.html
Normal 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>
|
||||
@ -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,不能旋转180,0、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,33 +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) {
|
||||
switch (errorCode) {
|
||||
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");
|
||||
}
|
||||
setHtml(webView, errorCode);
|
||||
actionBar.show();
|
||||
actionBar.setTitle(R.string.title_activity_main);
|
||||
super.onReceivedError(view, errorCode, description, failingUrl);
|
||||
progressBar.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
//安卓6.0以上发生错误时回调
|
||||
@Override
|
||||
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
switch (error.getErrorCode()) {
|
||||
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:
|
||||
@ -261,10 +270,27 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
|
||||
webView.loadUrl("file:///android_asset/error/index.html");
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
super.onReceivedError(view, request, error);
|
||||
}
|
||||
progressBar.setVisibility(View.INVISIBLE);
|
||||
super.onReceivedError(view, request, error);
|
||||
}
|
||||
|
||||
//安卓6.0以上发生错误时回调
|
||||
@Override
|
||||
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
|
||||
handleReceivedError(view, request, error);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@ -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";
|
||||
}
|
||||
}
|
||||
@ -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")
|
||||
|
||||
Reference in New Issue
Block a user