2.6、缓存清除,错误提示,网络不通页面
This commit is contained in:
@ -11,7 +11,7 @@ android {
|
|||||||
minSdk 28
|
minSdk 28
|
||||||
targetSdk 28
|
targetSdk 28
|
||||||
versionCode 1
|
versionCode 1
|
||||||
versionName "2.5"
|
versionName "2.6"
|
||||||
|
|
||||||
// 1.0 IDATA广播模式处理
|
// 1.0 IDATA广播模式处理
|
||||||
// 1.1 霍尼韦尔的监听修改(扫描网站二维码跳出程序,监听失效,调整)、斑马PDA广播模式设置
|
// 1.1 霍尼韦尔的监听修改(扫描网站二维码跳出程序,监听失效,调整)、斑马PDA广播模式设置
|
||||||
@ -38,6 +38,9 @@ android {
|
|||||||
// 2.3 适配IOT_Device:sc55g PDA 广播模式
|
// 2.3 适配IOT_Device:sc55g PDA 广播模式
|
||||||
// 2.4 适配 qualcomm:mc50 PDA 广播模式
|
// 2.4 适配 qualcomm:mc50 PDA 广播模式
|
||||||
// 2.5 mac地址存储文件(mac获取失败就随机一个);监听返回按键,提示是否退出程序的提示窗口
|
// 2.5 mac地址存储文件(mac获取失败就随机一个);监听返回按键,提示是否退出程序的提示窗口
|
||||||
|
// 2.6 1、打开程序的时候清空缓存(为了程序更新的时候,不被缓存影响,不用手动清除、出现了用户手动清除的时候吧存储空间清除了);
|
||||||
|
// 2、判断是否初始化成功(webview成功),如果已经加载完毕,那么apk不在拦截,调用js的方法让BS进行处理提示
|
||||||
|
// 3、根据官方文档,将code的判断进行修改,添加了一个网络错误的页面进行提示(并且添加了一个重新加载的按钮,执行webview重新加载)
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
ndk {
|
ndk {
|
||||||
abiFilters 'armeabi-v7a'
|
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.engine.VoiceEngine;
|
||||||
import chaoran.business.service.ScanServiceEDA50P;
|
import chaoran.business.service.ScanServiceEDA50P;
|
||||||
import chaoran.business.service.ScanServiceZEBRA;
|
import chaoran.business.service.ScanServiceZEBRA;
|
||||||
|
import chaoran.business.utils.DataCleanManager;
|
||||||
import chaoran.business.utils.LocalAddressUtil;
|
import chaoran.business.utils.LocalAddressUtil;
|
||||||
import chaoran.business.utils.StatusBarUtil;
|
import chaoran.business.utils.StatusBarUtil;
|
||||||
|
|
||||||
@ -83,6 +84,13 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
|
|||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.activity_main);
|
setContentView(R.layout.activity_main);
|
||||||
|
|
||||||
|
try {
|
||||||
|
DataCleanManager.clearAllCache(this); // 清空缓存
|
||||||
|
}catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
initView();
|
initView();
|
||||||
initData();
|
initData();
|
||||||
//SCREEN_ORIENTATION_USER,不能旋转180,0、90、270都可以旋转
|
//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() {
|
private WebViewClient disposeView() {
|
||||||
return new WebViewClient() {
|
return new WebViewClient() {
|
||||||
@ -214,6 +224,7 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
|
|||||||
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
||||||
super.onPageStarted(view, url, favicon);
|
super.onPageStarted(view, url, favicon);
|
||||||
progressBar.setVisibility(View.VISIBLE);
|
progressBar.setVisibility(View.VISIBLE);
|
||||||
|
isPageFinished = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//页面加载完成时
|
//页面加载完成时
|
||||||
@ -225,33 +236,31 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
|
|||||||
actionBar.show();
|
actionBar.show();
|
||||||
super.onPageFinished(view, url);
|
super.onPageFinished(view, url);
|
||||||
progressBar.setVisibility(View.INVISIBLE);
|
progressBar.setVisibility(View.INVISIBLE);
|
||||||
|
isPageFinished = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//网络发生错误时,先展示错误界面,然后关闭加载条
|
//网络发生错误时,先展示错误界面,然后关闭加载条
|
||||||
@Override
|
@Override
|
||||||
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
|
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
|
||||||
switch (errorCode) {
|
setHtml(webView, 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");
|
|
||||||
}
|
|
||||||
actionBar.show();
|
actionBar.show();
|
||||||
actionBar.setTitle(R.string.title_activity_main);
|
actionBar.setTitle(R.string.title_activity_main);
|
||||||
super.onReceivedError(view, errorCode, description, failingUrl);
|
super.onReceivedError(view, errorCode, description, failingUrl);
|
||||||
progressBar.setVisibility(View.INVISIBLE);
|
progressBar.setVisibility(View.INVISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
//安卓6.0以上发生错误时回调
|
private void setHtml(WebView view, int errorCode) {
|
||||||
@Override
|
switch (errorCode) {
|
||||||
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
|
// https://www.apiref.com/android-zh/android/webkit/WebViewClient.html;根据这个code进行的设置
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
// -数的都是有
|
||||||
switch (error.getErrorCode()) {
|
case -2:
|
||||||
|
case -6:
|
||||||
|
case -8:
|
||||||
|
webView.loadUrl("file:///android_asset/error/netError.html");
|
||||||
|
break;
|
||||||
case 404:
|
case 404:
|
||||||
|
case -14:
|
||||||
|
case -12:
|
||||||
webView.loadUrl("file:///android_asset/error/404.html");
|
webView.loadUrl("file:///android_asset/error/404.html");
|
||||||
break;
|
break;
|
||||||
case 500:
|
case 500:
|
||||||
@ -261,10 +270,27 @@ public class MainActivity extends AppCompatActivity implements ResultListener{
|
|||||||
webView.loadUrl("file:///android_asset/error/index.html");
|
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.show();
|
||||||
actionBar.setTitle(R.string.title_activity_main);
|
actionBar.setTitle(R.string.title_activity_main);
|
||||||
super.onReceivedError(view, request, error);
|
}
|
||||||
progressBar.setVisibility(View.INVISIBLE);
|
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
|
@JavascriptInterface
|
||||||
public String getMacAddress(){//可以兼容安卓7以下
|
public String getMacAddress(){//可以兼容安卓7以下
|
||||||
SharedPreferences spf = context.getSharedPreferences("chaoran_mac", Context.MODE_PRIVATE);
|
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", "");
|
String saveMac = spf.getString("chaoran_mac", "");
|
||||||
if (!"".equalsIgnoreCase(saveMac)) {
|
if (!"".equalsIgnoreCase(saveMac)) {
|
||||||
return saveMac;
|
return saveMac;
|
||||||
@ -212,10 +215,16 @@ public class LocalAddressUtil {
|
|||||||
try {
|
try {
|
||||||
String mac = this.getMacAddress();
|
String mac = this.getMacAddress();
|
||||||
String md5Hash = MD5.md5(mac + SSO_KEY);
|
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写入文件中
|
// 将允许注册适配的mac写入文件中
|
||||||
SharedPreferences.Editor editor = context.getSharedPreferences("CrtechPdaConfig", Context.MODE_PRIVATE).edit();
|
SharedPreferences.Editor editor = context.getSharedPreferences("CrtechPdaConfig", Context.MODE_PRIVATE).edit();
|
||||||
editor.putString("checkMac", "success");
|
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();
|
editor.commit();
|
||||||
return "success";
|
return "success";
|
||||||
}
|
}
|
||||||
@ -229,7 +238,21 @@ public class LocalAddressUtil {
|
|||||||
@JavascriptInterface
|
@JavascriptInterface
|
||||||
public String checkMacRegister() {
|
public String checkMacRegister() {
|
||||||
SharedPreferences sharedPreferences = context.getSharedPreferences("CrtechPdaConfig", Context.MODE_PRIVATE);
|
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")
|
@SuppressLint("JavascriptInterface")
|
||||||
|
|||||||
Reference in New Issue
Block a user