diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 0082d7e..a713e2e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -150,7 +150,7 @@
-
+
{
super.onCreate(savedInstanceState);
setupImmersiveMode();
initView();
+ startService(new Intent(this, DeviceMonitorService.class));
}
private void setupImmersiveMode() {
View decorView = getWindow().getDecorView();
- int flags = View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
- }
- decorView.setSystemUiVisibility(flags);
+ // 设置初始全屏标志
+ int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ // 隐藏导航栏
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ // 沉浸式模式
+ | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+
+ decorView.setSystemUiVisibility(uiOptions);
+
+ // 添加监听器,当系统UI可见性变化时重新应用全屏设置
+ decorView.setOnSystemUiVisibilityChangeListener(visibility -> {
+ // 当系统UI可见性变化时,重新设置全屏
+ decorView.setSystemUiVisibility(uiOptions);
+ });
+
+ // 确保Activity的主题也支持全屏
+ getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN
+ );
+ }
+ @Override
+ protected void onResume() {
+ super.onResume();
+ setupImmersiveMode();
}
public void initView() {
diff --git a/app/src/main/java/com/bonus/canteen/activity/MainActivity.java b/app/src/main/java/com/bonus/canteen/activity/MainActivity.java
index 3087400..ad12665 100644
--- a/app/src/main/java/com/bonus/canteen/activity/MainActivity.java
+++ b/app/src/main/java/com/bonus/canteen/activity/MainActivity.java
@@ -51,6 +51,7 @@ import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
+import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
@@ -164,17 +165,36 @@ public class MainActivity extends AppCompatActivity {
setContentView(R.layout.activity_main);
activity = this;
//设置全屏
- setFullScreen();
+ setupImmersiveMode();
init();
//初始化秤--延迟两秒 (否则程序会崩溃)
mHandler.postDelayed(this::initScale, 2000);
}
- private void setFullScreen() {
- getWindow().getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_FULLSCREEN
- | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ private void setupImmersiveMode() {
+ View decorView = getWindow().getDecorView();
+
+ // 设置初始全屏标志
+ int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ // 隐藏导航栏
+ | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
+ // 沉浸式模式
+ | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+
+ decorView.setSystemUiVisibility(uiOptions);
+
+ // 添加监听器,当系统UI可见性变化时重新应用全屏设置
+ decorView.setOnSystemUiVisibilityChangeListener(visibility -> {
+ // 当系统UI可见性变化时,重新设置全屏
+ decorView.setSystemUiVisibility(uiOptions);
+ });
+
+ // 确保Activity的主题也支持全屏
+ getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN
);
}
@@ -273,6 +293,7 @@ public class MainActivity extends AppCompatActivity {
});
findViewById(R.id.refresh).setOnClickListener(view -> {
isInitData = false;
+ XToastUtils.info("正在刷新,请稍候...");
initStallTab(canteenList.get(0).getCanteenId());
});
}
@@ -321,7 +342,7 @@ public class MainActivity extends AppCompatActivity {
for (int i = 0; i < tempSize; i++) {
hexString.append(String.format("%02X ", tempBuffer[i]));
}
- if (!isStopRead && !ThreadPoolManager.getExecutor().isShutdown()) {
+ if (!ThreadPoolManager.getExecutor().isShutdown()) {
ThreadPoolManager.getExecutor().execute(() -> parseTheData(hexString.toString()));
}
}
@@ -642,7 +663,6 @@ public class MainActivity extends AppCompatActivity {
if (jsonObject.getInteger("code") == 200) {
String userName = AppDatabase.getDatabase(this).loginInfoDao().getLoginInfoOne().getUserName();
runOnUiThread(() -> {
- isStopRead = false; // 重新开始读取秤数据
isUpload = false;
XToastUtils.success("留样成功");
KeepSampleRecordBean keepSampleRecordBean = new KeepSampleRecordBean();
@@ -662,15 +682,16 @@ public class MainActivity extends AppCompatActivity {
toPrint(keepSampleRecordBean);
dialog.dismiss();
currentDishBean = new DishBean(); // 清空当前菜品信息
+ ThreadPoolManager.getExecutor().execute(this::readScale);
});
} else {
isUpload = false;
- isStopRead = false; // 重新开始读取秤数据
+ ThreadPoolManager.getExecutor().execute(this::readScale);
runOnUiThread(() -> XToastUtils.error("留样失败,请重试!"));
}
} else {
isUpload = false;
- isStopRead = false; // 重新开始读取秤数据
+ ThreadPoolManager.getExecutor().execute(this::readScale);
runOnUiThread(() -> XToastUtils.error("留样失败,请重试!"));
}
});
@@ -685,9 +706,13 @@ public class MainActivity extends AppCompatActivity {
try {
h = AutoReplyPrint.INSTANCE.CP_Port_OpenUsb("VID:0x4B43,PID:0x3538", 1);
if (h == Pointer.NULL) {
- Log.e(TAG, "打印机连接失败");
- runOnUiThread(() -> XToastUtils.error("打印机连接失败,请检查设备连接"));
- return;
+// runOnUiThread(() -> XToastUtils.warning("打印机连接失败,尝试重新连接"));
+ h = AutoReplyPrint.INSTANCE.CP_Port_OpenUsb("VID:0x4B43,PID:0x3538", 1);
+ if (h == Pointer.NULL) {
+ Log.e(TAG, "打印机连接失败");
+ runOnUiThread(() -> XToastUtils.error("打印机连接失败,请检查设备连接"));
+ return;
+ }
}
TestFunction fun = new TestFunction();
fun.ctx = activity;
@@ -1181,7 +1206,7 @@ public class MainActivity extends AppCompatActivity {
protected void onResume() {
super.onResume();
startBackgroundThread();
-
+ setupImmersiveMode();
// 如果Surface已经可用,直接打开相机
if (mSurfaceView.getHolder().getSurface().isValid()) {
openCamera();
diff --git a/app/src/main/java/com/bonus/canteen/activity/ParamSettingsActivity.java b/app/src/main/java/com/bonus/canteen/activity/ParamSettingsActivity.java
index 5badcdd..6bda649 100644
--- a/app/src/main/java/com/bonus/canteen/activity/ParamSettingsActivity.java
+++ b/app/src/main/java/com/bonus/canteen/activity/ParamSettingsActivity.java
@@ -24,6 +24,7 @@ import android.os.Bundle;
import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.WindowManager;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -55,18 +56,42 @@ public class ParamSettingsActivity extends BaseActivity {
+ // 当系统UI可见性变化时,重新设置全屏
+ decorView.setSystemUiVisibility(uiOptions);
+ });
+
+ // 确保Activity的主题也支持全屏
+ getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN
+ );
+ }
+ @Override
+ protected void onResume() {
+ super.onResume();
+ setupImmersiveMode();
+ }
private void initView() {
TextView pageTitle = findViewById(R.id.page_title);
pageTitle.setText("参数设置");
diff --git a/app/src/main/java/com/bonus/canteen/activity/SampleRetentionRecordActivity.java b/app/src/main/java/com/bonus/canteen/activity/SampleRetentionRecordActivity.java
index 6988ed6..93e75e4 100644
--- a/app/src/main/java/com/bonus/canteen/activity/SampleRetentionRecordActivity.java
+++ b/app/src/main/java/com/bonus/canteen/activity/SampleRetentionRecordActivity.java
@@ -8,6 +8,7 @@ import android.os.Looper;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.WindowManager;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -76,20 +77,44 @@ public class SampleRetentionRecordActivity extends BaseActivity {
+ // 当系统UI可见性变化时,重新设置全屏
+ decorView.setSystemUiVisibility(uiOptions);
+ });
+
+ // 确保Activity的主题也支持全屏
+ getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN
);
}
+ @Override
+ protected void onResume() {
+ super.onResume();
+ setupImmersiveMode();
+ }
private void initSaveStatusList() {
saveStatusBeanList.clear();
diff --git a/app/src/main/java/com/bonus/canteen/activity/SampleRetentionRecordDetailsActivity.java b/app/src/main/java/com/bonus/canteen/activity/SampleRetentionRecordDetailsActivity.java
index a58967c..a165a2f 100644
--- a/app/src/main/java/com/bonus/canteen/activity/SampleRetentionRecordDetailsActivity.java
+++ b/app/src/main/java/com/bonus/canteen/activity/SampleRetentionRecordDetailsActivity.java
@@ -23,6 +23,7 @@ import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
@@ -56,12 +57,7 @@ public class SampleRetentionRecordDetailsActivity extends BaseActivity {
+ // 当系统UI可见性变化时,重新设置全屏
+ decorView.setSystemUiVisibility(uiOptions);
+ });
+
+ // 确保Activity的主题也支持全屏
+ getWindow().setFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN
+ );
+ }
+ @Override
+ protected void onResume() {
+ super.onResume();
+ setupImmersiveMode();
+ }
protected void initTitleView() {
TextView titleView = findViewById(R.id.page_title);
@@ -103,7 +129,7 @@ public class SampleRetentionRecordDetailsActivity extends BaseActivity extends XPageAct
protected void onCreate(Bundle savedInstanceState) {
initStatusBarStyle();
super.onCreate(savedInstanceState);
- registerSlideBack();
+ unregisterSlideBack();
}
/**
diff --git a/app/src/main/java/com/bonus/canteen/print/TestFunction.java b/app/src/main/java/com/bonus/canteen/print/TestFunction.java
index ff7e5f0..2857097 100644
--- a/app/src/main/java/com/bonus/canteen/print/TestFunction.java
+++ b/app/src/main/java/com/bonus/canteen/print/TestFunction.java
@@ -35,9 +35,9 @@ public class TestFunction {
void Test_Pos_QueryPrintResult(Pointer h) {
boolean result = AutoReplyPrint.INSTANCE.CP_Pos_QueryPrintResult(h, 30000);
if (!result)
- TestUtils.showMessageOnUiThread(ctx, "Print failed");
+ TestUtils.showMessageOnUiThread(ctx, "打印失败");
else
- TestUtils.showMessageOnUiThread(ctx, "Print Success");
+ TestUtils.showMessageOnUiThread(ctx, "打印成功");
}
}
diff --git a/app/src/main/java/com/bonus/canteen/service/DeviceMonitorService.java b/app/src/main/java/com/bonus/canteen/service/DeviceMonitorService.java
new file mode 100644
index 0000000..85c94f0
--- /dev/null
+++ b/app/src/main/java/com/bonus/canteen/service/DeviceMonitorService.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2025 xuexiangjys(xuexiangjys@163.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package com.bonus.canteen.service;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+import android.util.Log;
+
+import androidx.annotation.Nullable;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+// Android Service中创建TCP服务
+public class DeviceMonitorService extends Service {
+ private ServerSocket serverSocket;
+ private boolean isRunning = false;
+ private int port = 8080; // 设置的端口号
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ startTCPServer();
+ return START_STICKY;
+ }
+
+ private void startTCPServer() {
+ new Thread(() -> {
+ try {
+ serverSocket = new ServerSocket(port);
+ isRunning = true;
+
+ Log.d("DeviceMonitor", "TCP服务已启动,端口: " + port);
+
+ while (isRunning) {
+ Socket clientSocket = serverSocket.accept();
+ // 处理客户端连接
+ handleClientConnection(clientSocket);
+ }
+
+ } catch (IOException e) {
+ Log.e("DeviceMonitor", "启动TCP服务失败: " + e.getMessage());
+ // 端口被占用,尝试其他端口
+ tryAlternativePorts();
+ }
+ }).start();
+ }
+
+ private void tryAlternativePorts() {
+ int[] alternativePorts = {8081, 8082, 8000, 8888, 9000};
+ for (int altPort : alternativePorts) {
+ try {
+ this.port = altPort;
+ serverSocket = new ServerSocket(altPort);
+ isRunning = true;
+ Log.d("DeviceMonitor", "TCP服务在备用端口启动: " + altPort);
+ break;
+ } catch (IOException ex) {
+ Log.e("DeviceMonitor", "端口 " + altPort + " 也被占用");
+ }
+ }
+ }
+
+ private void handleClientConnection(Socket clientSocket) {
+ new Thread(() -> {
+ try {
+ // 读取客户端数据
+ BufferedReader reader = new BufferedReader(
+ new InputStreamReader(clientSocket.getInputStream()));
+
+ String request = reader.readLine();
+// Log.d("DeviceMonitor", "收到请求: " + request);
+
+ // 返回响应
+ PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
+ writer.println("DEVICE_STATUS:ONLINE");
+ writer.flush();
+
+ clientSocket.close();
+ } catch (IOException e) {
+ Log.e("DeviceMonitor", "处理连接错误: " + e.getMessage());
+ }
+ }).start();
+ }
+
+ @Override
+ public void onDestroy() {
+ isRunning = false;
+ try {
+ if (serverSocket != null) {
+ serverSocket.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ super.onDestroy();
+ }
+
+ @Nullable
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/bonus/canteen/utils/DateTimeHelper.java b/app/src/main/java/com/bonus/canteen/utils/DateTimeHelper.java
index a58e0fa..0e4dd04 100644
--- a/app/src/main/java/com/bonus/canteen/utils/DateTimeHelper.java
+++ b/app/src/main/java/com/bonus/canteen/utils/DateTimeHelper.java
@@ -18,11 +18,13 @@
package com.bonus.canteen.utils;
import android.annotation.SuppressLint;
+import android.util.Log;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
+import java.util.concurrent.TimeUnit;
public class DateTimeHelper {
public static String format(Date d, String f) {
@@ -87,4 +89,20 @@ public class DateTimeHelper {
}
return false;
}
+
+ public static int calculateHoursDifference(String startTimeStr, String endTimeStr) {
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
+ try {
+ Date startDate = formatter.parse(startTimeStr);
+ Date endDate = formatter.parse(endTimeStr);
+
+ long diffInMillis = Math.abs(endDate.getTime() - startDate.getTime());
+ Log.e("duration", diffInMillis + "");
+
+ return (int) TimeUnit.MILLISECONDS.toHours(diffInMillis);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ return 0;
+ }
+ }
}
diff --git a/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java b/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java
index 807c786..f427de6 100644
--- a/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java
+++ b/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java
@@ -25,15 +25,15 @@ public class WorkConfig {
throw new UnsupportedOperationException("Cannot instantiate utility class");
}
//本地
- protected static String baseUrl = "http://192.168.0.244:48380/smart-canteen";
- protected static String prefixesUrl = "http://192.168.0.244:48380";
+ protected static String baseUrl = "http://192.168.20.234:48390/smart-canteen";
+ protected static String prefixesUrl = "http://192.168.20.234:48390";
// protected static String baseUrl = "http://192.168.0.244:48380/smart-canteen";
// protected static String prefixesUrl = "http://192.168.0.244:48380";
- protected static String fileUrl = "http://192.168.0.14:9090/lnyst/";
+ protected static String fileUrl = "http://192.168.20.234:9090/lnyst/";
protected static String updateUrl = "https://www.baidu.com";
- protected static String serverUri = "tcp://192.168.0.244:1883";
- protected static String MqttUserName = "admin";
- protected static String MqttPassWord = "Bonus@admin123!";
+ protected static String serverUri = "tcp://192.168.20.234:1883";
+ protected static String MqttUserName = "guest";
+ protected static String MqttPassWord = "Bonus@Rabbitmq123!";
protected static String APP_ID = "52XE2dQBtdmMsfDMvyKmPCCPyFsc4jvo8TKvAdaYfr28";
protected static String APP_KEY = "9YFPa6eiuNQAFnzJUadn4LaR8w1bcw3a5ZWYZB6FB57Y";
protected static String FACE_PASS_RATE = "0.8";
diff --git a/app/src/main/res/drawable-hdpi/ic_splash_app_logo_xui.png b/app/src/main/res/drawable-hdpi/ic_splash_app_logo_xui.png
index 1f5c884..185cdaa 100644
Binary files a/app/src/main/res/drawable-hdpi/ic_splash_app_logo_xui.png and b/app/src/main/res/drawable-hdpi/ic_splash_app_logo_xui.png differ
diff --git a/app/src/main/res/drawable/activity_title_bg.xml b/app/src/main/res/drawable/activity_title_bg.xml
new file mode 100644
index 0000000..c534217
--- /dev/null
+++ b/app/src/main/res/drawable/activity_title_bg.xml
@@ -0,0 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_login_logo.png b/app/src/main/res/drawable/ic_login_logo.png
index fe7c15d..f62e44c 100644
Binary files a/app/src/main/res/drawable/ic_login_logo.png and b/app/src/main/res/drawable/ic_login_logo.png differ
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 20e53c5..3155cc5 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -26,7 +26,7 @@
android:layout_width="500dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
- android:layout_marginStart="240dp"
+ android:layout_marginStart="160dp"
android:padding="50dp"
android:background="@drawable/btn_border_bg_10_white_1"
android:orientation="vertical">
@@ -82,7 +82,7 @@
android:maxLength="20"
android:hint="@string/please_enter_username"
android:textColorHint="#999999"
- android:text="13866134935"
+ android:text="18158863319"
android:inputType="textPersonName"
android:background="@android:color/transparent"
android:paddingStart="10dp"
@@ -116,7 +116,7 @@
android:layout_marginEnd="5dp"
android:inputType="textPassword"
android:paddingLeft="10dp"
- android:text="Bonus$2028" />
+ android:text="Bonus$2025" />
+ android:layout_height="wrap_content">
+ android:textSize="11pt"/>
+ android:textSize="11pt"/>
+ android:textSize="11pt"/>
diff --git a/app/src/main/res/layout/activity_title.xml b/app/src/main/res/layout/activity_title.xml
index b55f093..c39ddb8 100644
--- a/app/src/main/res/layout/activity_title.xml
+++ b/app/src/main/res/layout/activity_title.xml
@@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="80dp"
- android:background="@drawable/title_bg"
+ android:background="@drawable/activity_title_bg"
android:orientation="vertical">
- 智慧食堂
+ 智能留样仪
通用浏览器
更多