From 6d005c57c43b20610c0fbd8a8379a15dc6a87983 Mon Sep 17 00:00:00 2001 From: jjLv <1981429112@qq.com> Date: Thu, 13 Nov 2025 09:55:09 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../bonus/canteen/activity/LoginActivity.java | 46 ++-- .../activity/operation/OutCabinet.java | 30 ++- .../activity/operation/PutCabinet.java | 29 ++- .../SampleRetentionRecordActivity.java | 202 +++++++----------- .../com/bonus/canteen/core/BaseActivity.java | 2 +- .../com/bonus/canteen/entity/SpinnerBean.java | 54 +++++ .../canteen/service/DeviceMonitorService.java | 124 +++++++++++ .../com/bonus/canteen/utils/WorkConfig.java | 14 +- .../drawable-hdpi/ic_splash_app_logo_xui.png | Bin 9562 -> 19737 bytes app/src/main/res/drawable/edittext_border.xml | 7 +- app/src/main/res/drawable/ic_login_logo.png | Bin 3704 -> 9565 bytes .../main/res/drawable/spinner_dropdown_bg.xml | 13 ++ .../main/res/drawable/spinner_selector.xml | 9 + app/src/main/res/layout/activity_login.xml | 4 +- app/src/main/res/layout/activity_record.xml | 22 ++ app/src/main/res/values/strings.xml | 2 +- app/src/main/res/values/styles.xml | 8 + 18 files changed, 406 insertions(+), 162 deletions(-) create mode 100644 app/src/main/java/com/bonus/canteen/entity/SpinnerBean.java create mode 100644 app/src/main/java/com/bonus/canteen/service/DeviceMonitorService.java create mode 100644 app/src/main/res/drawable/spinner_dropdown_bg.xml create mode 100644 app/src/main/res/drawable/spinner_selector.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 74d6265..dde9c2c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -157,7 +157,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 + + // 设置初始全屏标志 + int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; + // 隐藏导航栏 + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + // 沉浸式模式 + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - } - decorView.setSystemUiVisibility(flags); + 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() { initListener(); } @@ -117,7 +137,7 @@ public class LoginActivity extends BaseActivity { json.put("code", ""); json.put("phoneUuid", ""); json.put("uuid", ""); - json.put("loginType", "USERNAME_PASSWORD"); + json.put("loginType", "KITCHEN_PHONE_PASSWORD"); String jsonString = json.toString(); Log.i("getPersonMessage jsonString", jsonString); // 定义 JSON 的 MediaType @@ -143,10 +163,10 @@ public class LoginActivity extends BaseActivity { JSONObject dataJson = JSONObject.parseObject(data); AppDatabase.getDatabase(this).loginInfoDao().deleteAll(); LoginInfo loginInfo = new LoginInfo(); - loginInfo.setUserName(userName); + loginInfo.setUserName(dataJson.getString("staffName")); loginInfo.setUserPwd(password); - loginInfo.setUserId("-1"); // 假设用户ID为1,实际应用中应从服务器获取 - loginInfo.setPhone("-1"); // 假设手机号为1234567890,实际应用中应从服务器获取 + loginInfo.setUserId(dataJson.getString("staffId")); // 假设用户ID为1,实际应用中应从服务器获取 + loginInfo.setPhone(dataJson.getString("mobile")); // 假设手机号为1234567890,实际应用中应从服务器获取 loginInfo.setToken(dataJson.getString("access_token")); // 假设令牌为sample_token,实际应用中应从服务器获取 AppDatabase.getDatabase(this).loginInfoDao().insert(loginInfo); //初始化基础数据和设备数据 diff --git a/app/src/main/java/com/bonus/canteen/activity/operation/OutCabinet.java b/app/src/main/java/com/bonus/canteen/activity/operation/OutCabinet.java index 2e0140c..a88aace 100644 --- a/app/src/main/java/com/bonus/canteen/activity/operation/OutCabinet.java +++ b/app/src/main/java/com/bonus/canteen/activity/operation/OutCabinet.java @@ -93,7 +93,7 @@ public class OutCabinet extends BaseActivity { XUI.initTheme(this); super.onCreate(savedInstanceState); //设置全屏 - setFullScreen(); + setupImmersiveMode(); serialPortManger = new SerialPortManger(); recyclerView = findViewById(R.id.list_view); WidgetUtils.initRecyclerView(recyclerView); @@ -116,13 +116,37 @@ public class OutCabinet extends BaseActivity { } - private void setFullScreen() { + 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 ); } - + @Override + protected void onResume() { + super.onResume(); + setupImmersiveMode(); + } private void initListener() { Button selectAllButton = findViewById(R.id.select_all); Button enterCabinetButton = findViewById(R.id.enter_cabinet); diff --git a/app/src/main/java/com/bonus/canteen/activity/operation/PutCabinet.java b/app/src/main/java/com/bonus/canteen/activity/operation/PutCabinet.java index d8ab1fc..8c4e016 100644 --- a/app/src/main/java/com/bonus/canteen/activity/operation/PutCabinet.java +++ b/app/src/main/java/com/bonus/canteen/activity/operation/PutCabinet.java @@ -92,7 +92,7 @@ public class PutCabinet extends BaseActivity { XUI.initTheme(this); super.onCreate(savedInstanceState); //设置全屏 - setFullScreen(); + setupImmersiveMode(); serialPortManger = new SerialPortManger(); recyclerView = findViewById(R.id.list_view); WidgetUtils.initRecyclerView(recyclerView); @@ -114,12 +114,37 @@ public class PutCabinet extends BaseActivity { initListener(); } - private void setFullScreen() { + 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 ); } + @Override + protected void onResume() { + super.onResume(); + setupImmersiveMode(); + } private void initListener() { Button selectAllButton = findViewById(R.id.select_all); Button enterCabinetButton = findViewById(R.id.enter_cabinet); diff --git a/app/src/main/java/com/bonus/canteen/activity/operation/SampleRetentionRecordActivity.java b/app/src/main/java/com/bonus/canteen/activity/operation/SampleRetentionRecordActivity.java index deabe45..4473bd6 100644 --- a/app/src/main/java/com/bonus/canteen/activity/operation/SampleRetentionRecordActivity.java +++ b/app/src/main/java/com/bonus/canteen/activity/operation/SampleRetentionRecordActivity.java @@ -6,7 +6,6 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; -import android.os.Looper; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -27,12 +26,10 @@ import com.bonus.canteen.activity.SerialPortManger; import com.bonus.canteen.adapter.KeepSampleRecordAdapter; import com.bonus.canteen.constants.AppConstants; import com.bonus.canteen.core.BaseActivity; -import com.bonus.canteen.db.AppDatabase; -import com.bonus.canteen.db.entity.base.DeviceInfo; -import com.bonus.canteen.entity.CanteenBean; import com.bonus.canteen.entity.KitchenSampleDishesRecord; import com.bonus.canteen.entity.SaveStatusBean; -import com.bonus.canteen.entity.StallBean; +import com.bonus.canteen.entity.SpinnerBean; +import com.bonus.canteen.utils.DateTimeHelper; import com.bonus.canteen.utils.OkHttpService; import com.bonus.canteen.utils.StringHelper; import com.bonus.canteen.utils.ThreadPoolManager; @@ -44,6 +41,7 @@ import com.xuexiang.xpage.enums.CoreAnim; import com.xuexiang.xui.utils.WidgetUtils; import com.xuexiang.xui.utils.XToastUtils; import com.xuexiang.xui.widget.picker.widget.TimePickerView; +import com.xuexiang.xui.widget.picker.widget.builder.TimePickerBuilder; import org.easydarwin.easypusher.R; import org.easydarwin.easypusher.databinding.ActivityRecordBinding; @@ -61,12 +59,7 @@ public class SampleRetentionRecordActivity extends BaseActivity saveStatusBeanList = new ArrayList<>(); - private final Handler mHandler = new Handler(Looper.getMainLooper()); - private List kitchenSampleDishesRecords = new ArrayList<>(); - private List canteenList = new ArrayList<>(); - private List stallBeanList = new ArrayList<>(); - private KeepSampleRecordAdapter adapter; private RecyclerView recyclerView; private SwipeRefreshLayout swipeRefreshLayout; @@ -75,7 +68,6 @@ public class SampleRetentionRecordActivity extends BaseActivity { double temperature = serialPortManger.getTemperature(); @@ -97,21 +90,71 @@ public class SampleRetentionRecordActivity extends BaseActivity { + String dayTime = DateTimeHelper.format(date,"yyyy-MM-dd"); + binding.macQueryTime.setText(dayTime); + }).setTimeSelectChangeListener(date -> Log.i("pvTime", "onTimeSelectChanged")).setTitleText("日期选择") + .setType(true, true, true, false, false, false) + .build(); + } + private void initSpinners() { + //设置入库类型选择器 + List inboundTypes = new ArrayList<>(); + inboundTypes.add(new SpinnerBean("0", "全部")); + inboundTypes.add(new SpinnerBean("1", "未入柜")); + inboundTypes.add(new SpinnerBean("2", "在柜")); + inboundTypes.add(new SpinnerBean("3", "离柜")); + inboundTypes.add(new SpinnerBean("4", "超时自动离柜")); + binding.statusSpinner.setItems(inboundTypes); + binding.statusSpinner.setOnItemSelectedListener((view12, position, id, item) -> { + if (item instanceof SpinnerBean) { + SpinnerBean selectedType = (SpinnerBean) item; + Log.d(TAG, "Selected Inbound Type: " + selectedType.getName()); + } else { + Log.e(TAG, "Selected item is not a SpinnerBean"); + } + }); + binding.statusSpinner.setSelectedIndex(0); + } + private void setupImmersiveMode() { + View decorView = getWindow().getDecorView(); - private void setFullScreen() { + // 设置初始全屏标志 + 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(); + } private void initSaveStatusList() { saveStatusBeanList.clear(); saveStatusBeanList.add(new SaveStatusBean("0", "全部")); - saveStatusBeanList.add(new SaveStatusBean("1", "未入柜")); - saveStatusBeanList.add(new SaveStatusBean("2", "在柜")); - saveStatusBeanList.add(new SaveStatusBean("3", "离柜")); - saveStatusBeanList.add(new SaveStatusBean("4", "超时自动离柜")); + saveStatusBeanList.add(new SaveStatusBean("1", "早餐")); + saveStatusBeanList.add(new SaveStatusBean("2", "中餐")); + saveStatusBeanList.add(new SaveStatusBean("4", "晚餐")); } protected void initTitleView() { @@ -130,8 +173,7 @@ public class SampleRetentionRecordActivity extends BaseActivity mDatePicker.show()); + binding.macQueryTime.setOnClickListener(v -> mDatePicker.show()); } private void refresh() { @@ -187,87 +229,28 @@ public class SampleRetentionRecordActivity extends BaseActivity { -// CanteenBean canteenBean = canteenList.get(Math.toIntExact(position)); -// Log.e(TAG, "Selected canteen: " + canteenBean.getCanteenName()); -// initStallTab(canteenBean.getCanteenId()); -// }); -// binding.stallSpinner.setOnItemSelectedListener((parent, view, position, id) -> { -// StallBean stallBean = stallBeanList.get(Math.toIntExact(position)); -// Log.e(TAG, "Selected stall: " + stallBean.getStallName()); -// }); - initSaveStatusSpinner(); - } - - protected void initSaveStatusSpinner() { -// binding.storageStatusSpinner.setItems(saveStatusBeanList); -// binding.storageStatusSpinner.setOnItemSelectedListener((parent, view, position, id) -> { -// SaveStatusBean saveStatusBean = saveStatusBeanList.get(Math.toIntExact(position)); -// Log.e(TAG, "Selected storage status: " + saveStatusBean.getName()); -// }); - } - - private void initCanteenTab() { - ThreadPoolManager.getExecutor().execute(() -> { - canteenList = new ArrayList<>(); - DeviceInfo deviceInfo = AppDatabase.getDatabase(this).deviceInfoDao().getDeviceInfoOne(); - CanteenBean canteenBean = new CanteenBean(); - canteenBean.setCanteenName(deviceInfo.getCanteenName()); - canteenBean.setCanteenId(deviceInfo.getCanteenId()); - canteenList.add(canteenBean); - runOnUiThread(() -> { -// binding.canteenSpinner.setItems(canteenList); - initStallTab(canteenList.get(0).getCanteenId()); - }); - }); - } - - private void initStallTab(String canteenId) { - ThreadPoolManager.getExecutor().execute(() -> { - try { - String url = WorkConfig.getBaseUrl() + "/basic_stall/listAll?canteenId=" + canteenId; - String result = service.httpGet(url, this); - Log.i(TAG, "result==" + result); - if (!ObjectUtil.isEmpty(result)) { - String json = JSONObject.parseObject(result).getString("rows"); - stallBeanList = new Gson().fromJson(json, new TypeToken>() { - }.getType()); - if (stallBeanList == null) stallBeanList = new ArrayList<>(); - StallBean defaultStall = new StallBean(); - defaultStall.setStallId("0"); - defaultStall.setStallName("全部"); - stallBeanList.add(0, defaultStall); -// runOnUiThread(() -> binding.stallSpinner.setItems(stallBeanList)); - } - } catch (Exception e) { - Log.e(TAG, "Error fetching stall data: " + e.getMessage()); - } - }); - } - protected void loadMoreData() { String url = WorkConfig.getBaseUrl() + "/kitchen_sample_dishes_record/list?pageNum=" + mCurrentPage + "&pageSize=" + mPageSize; Log.e(TAG, "loadMoreData url: " + url); JSONObject json = new JSONObject(); + String date = binding.macQueryTime.getText().toString(); + String status = ((SpinnerBean) binding.statusSpinner.getSelectedItem()).getId(); json.put("searchType", 3); - if (!StringHelper.isEmptyAndNull(binding.etKeyword.getText().toString())) { - json.put("searchValue", binding.etKeyword.getText().toString()); + if (!StringHelper.isEmptyAndNull(date)){ + json.put("startDateTime",date + " 00:00:00"); + json.put("endDateTime",date + " 23:59:59"); } + if (!status.equals("0")){ + json.put("mealtimeType",status); + } +// if (!StringHelper.isEmptyAndNull(binding.etKeyword.getText().toString())) { +// json.put("searchValue", binding.etKeyword.getText().toString()); +// } String jsonString = json.toString(); Log.e(TAG, "loadMoreData jsonString: " + jsonString); MediaType mediaType = MediaType.parse(AppConstants.MEDIA_TYPE); @@ -300,35 +283,6 @@ public class SampleRetentionRecordActivity extends BaseActivity moreRecords, int total) { try { if (moreRecords != null && !moreRecords.isEmpty()) { @@ -377,14 +331,4 @@ public class SampleRetentionRecordActivity extends BaseActivity { -// String dayTime = DateTimeHelper.format(date, "yyyy-MM-dd"); -// binding.macQueryTime.setText(dayTime); -// }).setTimeSelectChangeListener(date -> Log.i("pvTime", "onTimeSelectChanged")) -// .setTitleText("日期选择") -// .setType(true, true, true, false, false, false) -// .build(); -// } } \ No newline at end of file diff --git a/app/src/main/java/com/bonus/canteen/core/BaseActivity.java b/app/src/main/java/com/bonus/canteen/core/BaseActivity.java index 035585e..247d2d5 100644 --- a/app/src/main/java/com/bonus/canteen/core/BaseActivity.java +++ b/app/src/main/java/com/bonus/canteen/core/BaseActivity.java @@ -67,7 +67,7 @@ public abstract class BaseActivity extends XPageAct protected void onCreate(Bundle savedInstanceState) { initStatusBarStyle(); super.onCreate(savedInstanceState); - registerSlideBack(); + unregisterSlideBack(); } /** diff --git a/app/src/main/java/com/bonus/canteen/entity/SpinnerBean.java b/app/src/main/java/com/bonus/canteen/entity/SpinnerBean.java new file mode 100644 index 0000000..57a2b5a --- /dev/null +++ b/app/src/main/java/com/bonus/canteen/entity/SpinnerBean.java @@ -0,0 +1,54 @@ +/* + * 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.entity; + +import androidx.annotation.NonNull; + +public class SpinnerBean { + private String id; + + private String name; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public SpinnerBean(String id, String name) { + this.id = id; + this.name = name; + } + public SpinnerBean() { + } + @NonNull + @Override + public String toString() { + return name; + } +} 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/WorkConfig.java b/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java index 2b37997..295c6e0 100644 --- a/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java +++ b/app/src/main/java/com/bonus/canteen/utils/WorkConfig.java @@ -27,13 +27,15 @@ public class WorkConfig { //本地 // protected static String baseUrl = "http://192.168.116.253:48380/smart-canteen"; // protected static String prefixesUrl = "http://192.168.116.253:48380"; - 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 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.20.234:9000/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 1f5c8842b7b161cc5a1f3104f85139d918cfe6ae..185cdaa3d19cde9e828d0b5e805bca8e733f68d7 100644 GIT binary patch literal 19737 zcmYg&c|4Te8}~@jCT*4wZDf}$Q}*&m*|YCt$xdY%3`QxHHQ9>njeXBPwz5Wc#y(SI z9SjD8!Myi<>-WCzAJ5Zg?wNDWb*}4seXr%5+j}hyWrmY%Ct)xc!=s1)X~ST&I2h~* z@;DvvgsJn<58$5@&mJ1N!(gW_fdA3J627nk4{6-BmG8p}yEzts4@d3pso#UaN+M6~ zJvj!0sTDr@@1CwV&GO`_Pf45pT-$i+mvd}4UbeD^ZXaQ*exKCLb6T?OcC|N0mS*jH zhSJ1Y>~heAxJ$nav(Gn8w^6}jhk?oEieSlck3{iCukjli>_@lbnhW2W{;IMR6Ad2p z!iJr7GAT`340+K1%ZKbwf1>k#!d<&rQ(Wg9Nv7$cJ1**IM$;D}WuJVuY>gnqGbyT4R4TA-qY7g47@ffSL;Y;kWkkn}46=ZBn z+hZb_c1+>yUA(odadGzZ@V&xLKtIOZR4W|40 zHv>$8v#P;Os$@x&~ z{s{emYe^QsV5y>+nK;SMo@0^2w>((ZQI!LlEb0NUn1|9ZnEmUVoQ6BGo^f(9)MvLH zh3b}P43-~S$gOUu!D0eIX<$9@N!7@|@_U)~uf>J@Xl<{0)4~QPNNJRfwsg@nO1`-N zkRHl)s_~`Bo(3%J129I*x-)1{%Basn^8qdTT~dOZ<=|-pT3Gfs4N8Q){k&Y>o!ecF z5|%L>H|bznIy%Dv#1%m_@|CSaiRb==P6M0;rpN;>(o0hPH6E$lG`>Rmm4)r!baxkf zd&KgcpaeZEJEPmMq|EpBonf0SF)t+S^ygMUJ5RgSL{U;zse?woofCFXpB}M%C=P&J zBHA{qyhfnico`Xj-ln;A12B_9_(d0lO^LMOPn)cP8X;Kle}DqBqtQA8-*dIU%67u} zV8IIDqbNb{&R-a@Cy(TA2?poUzy_NK2g&MoNlVrx8X^tr>)u^kE+w|4)|nJ8>44ky z+e6pacKqoxT(zB=BC4wyd*~Zs;ee-<_bzz2K5|;p6CN)U4cKsT3*+(`XOBbqiKgsE z?~9Ut%7=@fW**9XX(*}@Dl?IzNqbWyAw%6d!IAOR$;_#$%-}ESU6S(G?jjfiKV1(!ls#9UXnIUGrqBwKym(@KKcgg#JUNAiadByRk7=yF1hf z*#1qx__{d5VHZS65mGC}f0}C3(l+VXQDv;3+9SOkpA+q;9flH3Lr#c3dHAh}u@)y>%QEb+dqt`E8$9 zO5O<3>^t||1yxmRS@pN{^TFWs&-u_lhYEK}h+HerEtKXDb{cjnvJ+yY255Ti4hN5T zH$0_O)F+KjhQb@x665i?H{ST;6sRXa#E~=H*j>l{3)43Xu^&m|KKq+^j4W&y^wR7a zK^_C&Z3euTXPC;lnmoxFKL4mu7?Shte?v-!O-ZG^K~FB* zVsA!Vq}^2k=P4GO)36ZdjYB&K$6*Z6n;MT+>2_7YZ%WZy9{Fc$EyP|q%(9T=sa;ea z{;Q!mu=(qtR(?qFAxSEc@eb+UCBu944RfB4104RhQgKXw$nsKL*Ysl^rcr|IpNFEU zDM#I4f&6(RrSrLEIB<1f9awfYKpcjzS2`GuASnogC)GYrQ{cUDP&Il&o;(?^a&P^S zQ5w4p^S=gKQ}?Fru#%FVWf8e~kdT!{o5~1I8lu9dUg*^|w{q}yD41# zUL(uX1ePBS4mEOkQ7$0YKooea&vdD@!p?EgC7P!A3@Dyw!I(E{QFANaw|a-2zt`6; zNrz0|D0Lh#8gsDA)YiB1OtzZ|%Oat<52Kbp`|fXe zz&1c?u@A)Wt=?1}_cgF=9D}!yxhRLx$U;71@9O%rKAzAy;R`~{afu`+5bA)edubj9 zFp0=V*#K(u&k|KPbtB1GCA9|~XJ(RG)GEBEUaA(M=KNw559~q;X)XJFsq^DFt&R^A zbrFnAMBMhTHIiDhmD&u^?nvq>HbDLEg7hnzsQKjR<#4J*X}6h?4Tcn{F())vI5n43 zx3=&G_|p0&X9Mc?1K~vC%wqcH!4P$OjW=W1^qWxb*8#`L^DwjX!2Y}MtZl#LAvNxA zlb#^CM?KCpYRVkEl(ve|P6*}PZzcNia~}Lnc`)icYMO?gt&TwhQ2Yp(>1@y2mBDT~ z=9bcRVYF9`|DOS_+6Mcd)<;VPeb3ceLevkr}S<` z$Rowt0QV8kb-mY7Xp+TAOYkmr0ku)Dt$r7;jsD}O+@B@L4xFDS&hOHNd)m#Cv9gcllK{;lG@$V@nBYXU3uZ#H*>fqSy<9O62 z*B%}{PBJ^!y-rsH`aw80WU$RTt-tx_R%<}nT-|=*G8)lFvhywaIchrxMuK}Hw}DND z0GkvyW){7?Uv4*I2e542w}*%psV@xphV}8tX5JWwUXx1g#U7OtsRw`~rIu*Otfeim zHoo|y@3e9mLOsb8N0m($z)2-_(@J|S8Io?-e%m7A<;`T^>s%UNd;%1>XHb!Iq{`2G)oafV zCO$=O?vBe#BvEsRmEtmgxCe!7n-t+icY0iX_iZ-JyzHm@b1pCJA~>Z;HH+B29m!Y} zp4VK5Vaam{PeoD*8y7V9;^*VzEqr|T{$g+!<+o*vBJUwloExY=7E}%0pH3E(xmoIh zJY{FcK4QvK_qo?zlYxc*rdqzv+Jt@Oc#Fahg3THJ6|J=zeiU_8V%XIE`)79RIg};7 z-XFQ%uw6NqQnkk-kK)pLKCpvdXs5OX@KP!M)IJ)Rp0uPKyc&Zya~L^QT`8nbCcMozWE1 zur6r_BfUPXC!4};adbsLPtPV|d`fL(D0!OxsX8&Nk1&mkWe&a)Ht!_v?zs@a}&U>{X$}dag?AR8O zq~V9szI+nvM6u`{27IK_2$!a8lE3R;xH)15-HPcctnz;ni8y#gu)Ysh*OIvu(m-sX zZeyzJk54LDGGKP<%D%U8358wdN8_;3H^RgrEO_G-11jxFdFu1%yq4`J7_wzjS;@b1&@bf>Mkwe;JJ zH!jg2ikmPLhc7c*d+J=WB#Ek&PJL1;IQ~s$_zLQ|r>cTtQZ>oN9(8m^3o*N$u`hfdy0U4`pBb+x`-|(c^DS4~B-RS6Y9GD29U!LY8kpOgmi3CM zhVTd+98`vganmL^O@&(QO>Lc$wOpZ5uYA%JOc36CSRGCAs&Dh-mQJ!2Q@ z?&4EYT-Reg5czip*t3&Lfbyc4p6q}3V5__+;$FM9^n*V`(uEOO4XbJ!jt==u7Ctko zzPn!-Wf9lT_^p2{(Vr{2GlE$9&u>B6oXKKuai(O@wWUA!6csL0w>BkWJsz55FC;5J zvhwlGz)ny6R4mH(mhjzb)_vWX*kg^)fc!}z!+$qVc}k13okwzuYTKvnq!{+YI9?%T zMZlP6JsQy1e<2jRuM7VBYnD!M|hdifLE4ZSN;L-WdgDh`&tX%sZ*T= zhz6mGHtUNOE+*qPBXEr)UUY6hhl$IE{?ld;k<<86-u1K6IWHs zagD2B#<=E3*oSil$n54!-o2br94CuwtB{;l1A_HRW%?$a;d>yIJZlXiSwx^HqX+8s zxMFXa2Tz1lyF&k1tKWL}w86g4&Q6{Q#&R84@5?k-KrTwzx?DQT>LRw^Tf~{OD`4XZ zd-Ds@D=horToL}tDTHxzqAIg8+{07n=f3Zw``K6$tZi#n^3~`CH zhw|GU%)g(HFF_yd8wY8XHMD#sX5N)cogS!PePegzw;zDjMxW%n*aqwiUDd9lF)v$# z;iQrNFo)SWfe1|kxy0(&clN5Y&|;{)@`I%{;V{P>pUMb{XP z8p<~j@g?38cOfo;t!mmn%{HJ~69)6gs=%f!=4ma?bc^GIc0aaBSCP+sVB@2an^WyS z-*_+n{=U6MQ;AE27jf2xRv^z(zT{c?6q^Q2|LLE;nPCyZb)ohp%LPCt;om*fwzt+= zoIX$SjX?;whIrMoTpnvFw&yp)v#VgudwO)~;KdT{!J>f0d3D5Jbi9(hC#IRpo*7V- zWjio#<2$9Nutr8B++=TrDE12@+sg3o%kC8tCz^KrSo8go9!!dI?y~ph5Y00=aNyAp ze_TfT^1*|B8Eu!jZurs09k3`k$2ueD=0b)`)tAeEr{v}phB+1OV_|nv065(`k})<{ zupCfgm4c9u(4&-aHE_d(!P1@e<>O@%)~jJ;lvF!BJycZBgWJUtPX?X>6Y2*xBb3_m zNtViFe_YFXQVJy{fCnc002~(ega{0?nDE{5p-#ykU`o0~tr|~4a$K4P<>tkkwtK27utS9t z8}2D&H`z4@7qS#b;{M&eSWq`)oCj1`<8>1{Tv} zGCnEaR>4+Gw-E^#TI)Pv6qsP8XxdC1N6%&{Tl?RCz@VgPG415Xd<_FMs_wHI>cBrfa%k>?JC5WrIbC2wdrFSwTO7%36VzAQ6n zflR29KLV~;XH{if*%p$tNuVCQgz-ZAmc&pmxgZ{Gl=fh>#Bs)MsbHC`^aFYUeX7^182dCHdR$=+U(21WL}TV+9)gm z+)AJ@QyNmJEd=O7G=R~>o(CN1TMRh*F*{#HcTmB-K|q*3*4dR-4ZsC9|9wq@gHQj~ zB*)QmPuiq;;MyrOaH6$JgiXr-p}h5OXtcJNFc z&gn_@UGY$0d@)a4;)UnVgfU}ad_D8wc&D|!7bL}d83jI#V*_k%_U8eOSPBWkZ&pI; z{7us|l==u1Q=)U_4BK*ZT)DcW$S3DB5Xa>YiR|ZnekjT%t}klpQqUH1xz|_G8Wf8V zWlN?DufY1_fH}{AbIP{1hR)0e=Sz$jvlFe`l24^x0;k`&y)VDa=e1Y$ zn?W6<&-{2SrcWc>%@9XmcqV$lNCPW2Hzu~40Q&;e@fK7EeFJ4BWdgC&TFxb;R9-M= zC<;~5fpXi}_&ULWsbKb?r$7WE`-1`0#qExkEU255y=Hc|(*+2z%ZX>xUxtF-u={s? zZLMm*03~XlY*jUu6K*Z*AJNL5pa|G%KBHl8*U5TrX!vN?fD-{|lpE0Xo`xpcAK>!F zaL+Le5&|XuCzG9l+hh$#y+hoau4!2_>Y{9WaQUSO3**#0*zZzL%5@q|Ak&1f?-#BzBN zL+V{nc{BnMtlySuFV(oz7S(N;&>m{~c!=#>OJli#%OsoAT8+#2t95ByOO%x~qW)@y zi+c>K_)kL^?AFDWOZb-Y2A`$AZFq{Gc(SaYcMAdU(IrtrT3lYc0H0vh=|)0j03JaH;jHlk)4dw+#7U}}%=)i-@2&P>+U*(kw(0RovvL`x{fTdl zC^9MKRBoD~YyHgX`%`jWfcAvpIE8N@M6Q>T7Mn~cLxH$Y)T#=0Hi)RI zv(9iH&&^;h^m3dYMtHd5YWWVn_w0u~n(eg&E%sB^>a)+x7ni!w-nuzi`Ex}9o(Sa5 zOW)h348WXEQ_j`qWwI7m?2Ke?x1jbAZ(P9?jrZG4M$UKFZ)(yF_2ayh_JGtwIxe2J z6FkD;Ey+4Ff;UrAnile)wS(ySDGDKR`EK=D&AZ6UcR&E~ieBi->lA&~XatJz=(167 zg8t`3o_`-@OD(L8ZCw*!hofg$OB}_bI1hO@=cYtvEct8Bh61QAw1iW-&&=o?!$r{Y z=Wn0GZ~~9BBJ>t&nkGfd*8Z4Tqwh zNVhdTIK@Ywj&r)@Qx8ReOr9^1c9+ez~Krdp_1aB--Md_?o|E$_S&oTAm7Y+%!y zwPgP-W7{|7GxVEe=Y#T!c&-Fx=yBGWfV=h)Ms2P4rXh6lyp!lWXnK3(FbQs6qPWBv zS-9DA06VgL4em&Xok?&#!A?(N!`Y|(<+luk zw@2LSiL`5-;;;9> z(75$TvW)i?2p@G2IA5&(PC3@}d{qF&+^~T<7-tDM$Sp95#|JNuHbuk+)j&DW->UD9 zikt71`HO=Z7lW1=c6jS8 zCS)yxVURDhdh@gLzPp&ed*hW1RKt>+jE1gfJi#N=n0EKzyzpP6+;eU%SU?!mr>_Y|tM?>@Y-uw$*#N>oj(UE}J6`i#{o4gV?`d(6V?PT<+%@y^ zsA}qt_+kp=33P*C8l!cDp3xE0X%AF!DN^3I0)3&3|M#{#8}T+w z@)tl6X>Z+tIRpOps5ZE+XFO0M8#;hGdfGss2v7mAiG2uPmQ}_+E_Wp-S}~R>@P7*i z=fw`UMyu|OTb+*nIjbcC5iM(>zN<+D0~s_P$MICT!|6>6CV=UI*uDw5@Tc#NGl~-$vMQ?vXwLueXE{C+roiUgLO{Dh6(um) z(5)pfrGlC%mdza8`V39U&aQwC!HnpZRdAl3A~Hv8W7P$C6!gDGZN+3C6W24FV6X@q z0pO+ATFmYS0D}{h`J9+(ffUafq2^l-wP}Y>z75t&0TnA?^VVWkV0CEVhYE~u1qb^| zi50MwP0+g6JyugQnsc85mAMf7?IH;42lIea#k&7*$A>?&$?@5A{`!w`tvun(=6gkb;tk!bn`4h2tW4Vx-s2|xoI_d%9Un>%fg_w@-q zanvsPL~0ErK0u=hppk=#0JGC;nL%uL8E#roDlF}LJGcd~G#G{~|0|mul3bdZ1*AWm z*{ayMoB>%{-O8Q|6$cW4|GUXlvo={Zvgv{ja_gGKPDm?ev4TUI>HmAUk!!B3w!t5%pbqjFJS%Yv|*4VSb9A8yDh5xUT?C}4Z|;tuM!Pbnr0Xh2Pir0wOB3T z$(+P+?b&xa*!MtRaKHD_a(h2~%cf^+jv@92G~XY`&DA{OUK&e)Ou%A8>rBr+s*f>r zS#`QcnBq>On}VJNbZ-@j*#E*g&avOWc-qZM>Xsq2Zw`6a&pwxh%7xzxmS=Eu877dGeJ=ng7)p|{n&f5n*7dR zHP|5@+TXo?x}XC{ebY` zGuruO#>|sNnz?Xj?t|%`Z(-iurQWxTBw2^sfgzGRzyQ8=J7KaPzfh5Y{7HraWLkRh$O>#7LLI22Mh;K_3Wbk&B>a~CrcLFz5Hg;+0rtoLhkr$+U zn(Fk>Ed|yR^+cdLR?73A1giCk*6$O#MrC1_`N1NWwdAt2`6b;Rm8PL?spmgc)A1o0 z9j9G`9HC^%8BI#%D{`%OO~MA>k*gQlT^Rh-Afk2HpJVD;c-q+|kTveG(ei>6a7Gd7 zIvsncSFIz7a3@hht|4=PjSi~f!bR0#X}Y|7GvKDVZ&gpq5p#`}@07SF0iMyeTl}{c z55WHq)U2>1F{^gvWe)3|?3qcczGLNF5c0clIT&(Sl}01n5YX@2QHIw!s&^sIjid~C zDcXX!ey-p2Ht6)NH&+T2-tu>o+9|h3XcYMRpQ{ONJOg1x>qy-a%hQdTyG=;$o09e7 z8m?6`K-(s4Z9w^&t*S`PtOrsiBGQ5>OVX5Cp&UdnckgnaZcLMJ5F%})$lqf?VA{U+ zwxl3uB!lXyP8vTx>b4c7f6qlG&=(TC5wOaF@~WJH=w_`q?c&d85 z032H9oj!l;vUgrDKjI731I>RU4CsbZ*XVq~uo2TdtDgAE@z!a^f4>Iqe`MbTlb9P7 z&RB1QH;FeCL_i#W{50VjiO>UzFNkb;-*=g)brik|NcqDs2vWAzdE-IHRnH^7AfRI2 zX&D5txuqHa_)vJyI;I!!3f?OKrAA*E%>wkfVRay+RQ}5rkk32s8?7yMvGehd$ zePhd8drF+^6RCZ`S+!C!t+_(qGrn2tz@x-hgmU?QV^F&d5bX9>7LnGWP}vSsmGj*+)}n$9TcQi`ftT3V~mJ|zeDS{f1MI?0gW zQW&e9aKgT@jsWc43&lS?|mLMqXa_Nu+j3s>zD z5$s_S@JFrI1+{iq7)*{Eo0`^2PrOV|TX#E4HeV{)J2t3x;L4Nwd8KOpI%3k3SKoU@ zpgW>b0t;M{efNiVDxi_u;G+iFq0}C<}9ZfB1 zd+%S^DUc>G{qT4957dFf_f|f085iK(dxquVvc}rPvw^s$Ki4IZeENI!A5a#2oGFo> zym6v#6%(~(f?^HD`g!F@bX(6wHe)xon1hGN$N^)K z?_E%4{P}Tv3VRDVd?#?W3f?o;33s-*qajFbT-lp6quGS(91XQ9SBA5&Xfppve3hLXA_*vdHL%9a1i%irqg)b45{I-&|CURO-67DcJtP!{l)Woy_Urf z0#^sBt}{*!lXoW!&su(G3l$ zyj?eV=-xNB-MD`1yJts(n_AiUGJFmnnc3|}Gz2kWy!nq0_cr{eRwxXN0G6*uaJ zg@dCtGTYlMmgep)I8F4(0jEqH-%FKvGVWE+us14_OviVfn*k(bAK9U7zAANjp=8QcI$rC@9n&GuPEuIL?0-Y?(D?;di#%llw}vR6_qC; zUJiF~42JZekY7KxVq`wHvKvZ6pExY^IJ;NruuzvJN5h8lO8eP`qlVx)Bk)uI7WALf zZkDppJYyfiM-5ER|G!_qc`oF{XY<_N^=a$y5koO($n4WCPX7BAw;W0Tu9>~JeYDCc z8#ENS36&UvXqyyr_6{420H$d%hNXjkfBhH&HzA(;wbRGl+W{!322v3Ay|cwFZT9}) z9oV7l&BlGnj1Ly4xu`C1`9M!-Lg!zP^)q7M*v>ZAKw&{r8iSByO^UgcPnQoixwT$= z#v(ny4MVl_U+ouPhO!~8dqQgp+dd*l@kgAe-G!`H{Y!4T&&X7Y3I z_rl@Dt{_kU6hf;Jq)vh(pc9X3uRI}G#D9`pFn=g;m}0DRcOKqQTn;>d%-F-vM+5)++T+?dOPE4J{gb)zELzLUplwb*lH%lmBy4dJ*Fv`p>gsd`8yEmvzOPb9L7FK zq_TtJzbP|WR#{r>HXgNE3vhi(OnbQLQs?e=CQuI=+`pomA**3Tc=O#lbh-fJH12Cx z0NknsuJgfC??1I8cPk&W>H920nKrJ(@$m@4>7heTT{R}2H+E4xJ^MQ^2xcY=TQEcD zTBs;rzh8{0l$hyqe)?wjH4NO5PhA>NKX}tYOEl-CopsiyJMv+f_IMTviHhQx3Ru-~ za3!ntS#P;R)g)6$ZBNPFf7g&ai|rpIERTVkXaNDn^h`=xc4sOwQ#vE!v=Oa72yI<8 z6(jD5*+mP?NldI=bG1fTthVRXb)S0Ut6ZTt0d=elo#(u}b53eP)CbgDu}U6KoFj zZ+>3Y8AhB@oVwXk$v}L?O5TsIARO8Oum^P7#uTH?zb{AJn{8BLC(dByhQ4ifH{7W_ z+ISao3l%*>$ACWI5~K--+oV}178C6S96EjhE7j~&0I}JDiLSoGTcNW0<5+38-8K!= ztyvhQMvA%jPnAfKN}Okml_u;9m<#G^35<~*(-`H|`J>xHfpJ7)_}HTX z;O+&~e`XTbk8&^m7NgIQ!Z$`%VhD#k8LYgszmAU90VDGm3JXKjJ>}=NMp=3O-2j}%frUV|>7fO?lorrGISUIc z2$w%!b%L&g>lt-);Jvfvr97Am5KM7Bm;()fUD4}5Y%+n zU-(0>W4-p^gi1o_rDwX0>hL-zWaV&jeVM0)%?uucOB8o$XFF_AKVH_y96{ESZu$HE z;hr>?hJPb#nMV&7Zbrnoo=7bLbspk~$n86g7_%PUe6c^}O;{N#$0e1Ge~>tAfu|qB zysUJd?-{mqQ$w`RyvmfozyPMhx`s@df#lnxd-*e1%u|pf598_&?XNq$)q6d6F3AG7 zqXkQm8Tuc^>eA966RYak*M93x`0+Gk%m1;M^(hnAQ>o9PZ#qr>0K){)Ifg<17vwjb zmQVcqn($wRh>EanNyN<1LU(rb#S7gVhX;rJg6RCcHrJUa?ghw1r%_+!8ri@H5Eh*k zB_&yyiWdf%Osu;cvAzJ7!okq4JMzOjreUocB$ZY+CP48K>V!8}{~aX0VQO;)@jVGJ zO1`2%C?;LM-vbs7LCG|(gR9nrz*ZawpM}uP5WE7S`|xNgM3pZ#AO(T#;IY0Om$vyG zKtQ%EG!P)>(2t$h)E{sOR^lW+qMZ$3y!~g*?x|N2It@Fg6JF$#@$0!dB6psI}$JUn8nCR6IKqk zr3MxBUt%eP{R?u!IU0xuW?w%&%Y+X?5t^1Sminnc5M6&cNe_dS?q8-Ei~~80mQU6F z@e4ky+q=0B3J_l%fYW8DM=J3Foxc%|2tcG3eJ{1I%PVfKH#sys)beC|m~`@JuSNqq zaj(T0z_^(W5JnW$K`AAQLHhP}xV^iyfi9q26QCY!6@LA6+lFBginK4i^2~N+aYiBa z#3#v#qex!H{7r{Cofm+l&K0J@jD?vo$ng@IEd?`aHO>zuBs0xqj127UAOA!x0Suk#Kq~DAuU|4JZ1=Or+A~GjS$PN=H-Ah&`r<)D0qQ z@V}d-{($oOZBFafh%H`e0j^umj{1M;;(YQE>%xl-Ay%)XfNSm+HH^ z(6t{ifW{}i=QQlHZd$j8U@=Rbs~AxzhC_X!?9YRIK(TJ)aQi_jn4)+Z0Z01T(2ba< zaoS#YR0<_N0vXCc0Fa@ytJKp6NI>Ca2yCYhs$qtN_c@9AvFfeIe|0U%#?TM5mEl}~ z+Zy*FgE}BO@bj7Z5~Vaxz$`@o@2mW@olW;0=#paJz9Hu_{+7ij3 zk(G`SKa!BdlW{}CVyvcU3C^z{WA)=RPRktfIdqIlU5|8ws8&KN(&vprF0e9?$EiTr z%F$h?tCVRPO0K+vtHJdDW4gPLw6RK(T-*kk4ildCb#2TQ6U+(=U?wRs1e8WG6A+u6 zH*&4Z6LeZWnd$+V&rt~}ry}fBuIhQ<(dTOyHOa0QYt`{V;_zLe%vSzqlAdwe3tKk; zPh-)G>ldPl0bjGw(m6D3hooh}>c|rA^PZ;U1-+q17zU%D7Z6$n1$@BtsMFul2IcKS12k^M=M)>j_dmr)mtvUPBJ0Hhqu5Tt zV2(mF;RxoLSS7pL{8s=jf7iW|9cUG+C}4}>^8cImmX`HyI5^LY`m$e)A>c^-ze`5z z#C-OW-+$~Zbtd+2M-kq*@-jj{^1L=a%uuWTM$z8SE*CBP_z))|)P_fX_>0AcS6UI1j`8}-DO(`S0;Y@;@>8N#2YB%&gX5}sO0|g{dBV1y7T!yo~ zlfFD7QYW~wztdp)dSxc1QoClqd77+ArzHichDrGeU?C_4(tRip8YS7OG*Uk|hvKc@ zS&UC6^@&G~vE$hf!Oidi{eqsTkEY9?Vb}+v^n>SO8TQrG7OFRCeSKXhQPO<=quEVP zl)Y4-HV90%D`;^R?zr;OpV=Q~^o}}I6_Ckl%Z9GiMW`+T{aWGjak5P$-Xe$nk`@9K zhW6`65eZGBychSL1DO-~mNBt&{VB%23bp3uPi-+?A*m-jyVU}e0G97;S3;fTR0KOq zbFx1@DZ>pnY%z5TkwLVM%MNiyVlWv1x4<` zao{)lJFSFT$9|?t@SXtkFB+hU5qVzqT=e66N`xdOFSm`pownBnO&jj0y#raAFzDT9 zm^Jqugs%k96^M1N1F2E2dR6p^lfjo|mtMB8WN5)df0g9Gi(g{e06kVFpr={tBJH65 zT^{Ff=-n#h5mxAR>8qt5D{(-;L=Y|2dhB?2Kjb? zIHa?K?kx~psTr|W;uWFG23pn^17=g?4EHYakfb?~xGK_Ry29^gArVTz{LK;Yj1@3{ zTlb($#UA6sI63UKZ@PIe3lQI(+y31q&u(!r*2fZ%d~F%)*R%=}CPSZVxoTaTwCdxX zRwP6PL-oKbk3PpW`4R(`qTb@f;9~CcA6wpFNS1P3iW}%6&TtFld*Hj_q7vKjprO)o4?K|>$g?nu`kVNTL8SwcGiEswt~W5 z?n)&|yVXkszEq)sDOgVwlV$}~mOf%f{dTd1={d^4?^l!Ik_8 zuapc~FKTxZhKH6Fs`T$cfj55$$H@S^78r@v7@i9#+J`T$lv<7LSS?P-OURn-_-|=J zuXP4}{Rqbysf3>hm>zD}FWftI`vR@UzLR<1ev6S>Ig7B^0tX$~BD4Ph6wbUQHNZ(F zcFJlic`Ca|#Pb`6A4C1jV*HlJKB+CN&RP@ZF996Yia!9d(1PJ1tpCz`OSC@^Bu8L>uc!*P6}tw-w^PN`x_ zLzf&xB4{X|sng%L_YR6$eEkBb2G(7rpV*|I?<~_mZN=Uz?qW#BnU}e>f27@v69-B& znG{|60vaeR0RjQb-`lJTaO9|)R%Y5uqRtFhFk!L(Bp8d?#DN*jV|Vz9U)xH4=ZTdT z91(Sp$Q5bszmTUqz1Fk&q`_N-Shv>7W&evA#tP+6PqbCgxH*52Y$f8A2w3w%6!6B) zq|Ub7?!?b+3U$4yv%trqtZj)L>V3qdX>zh|fOb1PjCCvPspx9mC3jU#cRVIMT>X&KiM0y;0y&BuugRqUu2TiODxH zIAl|Ir6zqbKS0c|;A;g=pM5T&?Jrf(fiKI#EE`=XfCGbaKpDITN$XgQ7yM!>9*`f# zS}bVnBzHf5qZFH*v#?;yMMF;jQ^ZEtWU>3ON3up%MxnM^SW?we7Y+3O4~#bETAtgu z{{xi*v%@Eir-J=?JSLfx-`PejMZ)NPJEGni!7O@7 zLU(Dwd{MBT6rJEYp8)+6~`Zqt)~-8loQ&s(rvYc&QIO#5Eqj2n!52Pw@W6Qq)#LKh4GNAC%6m2>g6?X#ua=VL(mD@i~p%QUEQj6Ezs#)Nib>D<7xLBE>)GR-1Mh-un zLYb<0g(%72OQz=vCGTg2ay_p2vz_^K&rE3Rw1|>^^rP8PHI?UY!shgS=%7NFY} zV~}#<*@=3di!X4Vx%0Q(J3F5Ag4hb#CAs-h3axKSkvFVG$Sr>4L7V)cBH0Z?gJD}f zz52EK=X26tc8?3#k7vdn23RKdikTG~pHA6EF~^XMW^7FZ=9ASynzG#ZPahRz8WD-Jzbj#Y>>ov^iiG;h=tgp{0ZZnx! zb!LXI&D1hcCk~2Qxw^ZGd`|iv5GyFr-xzT$Or?H)hN6!G0+CC@opP?c^hkgqR2H2( zFB{EO2zLA-^#r)=6eL>z@O@nFk5igA59w~};HU|8m{EPcJDKA57x=?CVc@HPTKDa? zUf^{izgy?2M)71^>keKiT_MOx%X9&=Lg#M(b&R}VRE+afnczT~t!>^7D0N41y57tP z)BYvYl7k3%q2I}13*C$xSzog}B^s+e7YEo1qmvUa!uUY1dtEr{SdyTZge}oa1Sn!^zvjCv1E-Dk*HH*$j9Q#6GG17A*Hs7}lL)xFr9vE;Hf4Sy zK`Ej8y7mFq$hBO8i{)QAfj;%Y_Vi>6tlTR^mb!C+QE&0Mq&-Nvsgd0kV?OoCauvn3 zuVvy`Xusv^sAh%M4N%hmbKO2g9JzpYs`>UA?Xf!v?8FmHKme6fxxi02o$ zslN4al^>!{4sWcn0e{Hh%~G9DUY$waB$w?N+5B{a$uB8#yq!g09D6R9bQ%Ut-<0O+ z%<$rlXv__{=x|%b(r3!gLynpI4pzPMu;H~a-FBU?&fMSoqLZW_ z;5}G`$T>jimdyh218k;`4e5T+Q_cEv@V$w$gc`VPCV=eu$0{Xo)_3_52}4I)a4U}) zbfBUSt?YGtQp*DTLlvAtPqS7yJB3Hhf^&w;2l#rTtb*c{epPB$P)bJMa-K=Wg0-1! zLgN0a-(nf=#p%xSc2dvfpO#S?+B&?YICQxqcrm4jv;F(?!bFAY4V0 zYU=HUg6e->Q*X^KE0wnH)%G#~$g5XPq5@KsVMh9nd5DhN&w)X;UKWSfdB-`C zf73AQ2*iIWLhuQn-{xUD((CwXS%4q)RTP@S>|L+J6zag7cibA5R^U_mx$P;JuWDE? zyB82L1dJ=60)M#!TeacuqvE52lx|tGoL1&MTah*jl8{{WlexkLK`HXrsFY)7PmC(a zC7LoD-MsICfcu`|ro{`hIOdyDst%=kN7rK1zvge=ztW>Ur*#mi*isQR*m1_}Jo~KN z!5SXN0?KYoD3L{PA8j;l4-T_puK`D%R_j!{s5kb_(LfrAsgtMEV4r>%kG@{ zgZJ%?k{SyD;OmxRI&b`@i`owcB@doaHhHL?T=|L=efnefCBOrGUCRF-)+&y4EN$>^ u1px4M?U>2Gf6oU1P#JmaUE0uH`2PVzNB;{b3Z|U^00000IG&sSX0>$0k-K`WUUZg;wXmNLUcc(ybcb5crcfQd7cVF)F zz4JSnIkNWJYp*kTNM?R3%1fXi5g@_9z@SJ;iYmjvzy?4+LI`ls89{NHZRq8#g^-*O z3`|ud@}to^=or>XSwa}5e3Wnx1_lmBQC3w<;+rg8I+!kFi#7uc?fAaD9?<@4gU+Wz z=eOuGz-q-Wf*CJt#m9mjFVIO~F%+}KnFWPyu?@dK0nk_|o)(J#$M)ZlF?}1#!zWNV*b?J3TpZU-K z*Ax(74s^H&4TLVel4QR60Of>|0Mj8*sn8*91_T;TmkB*X+ZI$OL-r1H#?HT}S7yc> z$bSq_ALue5uNnW_uh#-0(CX+jAg_jGz4FjQXKOYYOPDL6y8pf_eqb z`06K=5b6wcH=*r6wX|7KFtnnr8uO!F=ojO~Sy^5M=IZY7;SKEbeKd4YTdhx?Q4kGO=(w!lCAGgV4>|t`vpl&nP z0ankU`M_2zf z)tx%^vTzKY_?`GiCbCR}i9D>d0k}#mWvfn^{L?5nHbj8bJ*|Lxy;#UNJEzaYPG5|c zW%%=~o*c>7e5DBSQD2<|j-a?q{-pYHHNnZ0q6MFTFP4Seft6PC6-3SLY_87Ax#m&U z4$OZ23<}?zR9s{=g*zo%?SFY1ntiv?ss)KkaHXXi!N8EhNQnxmx-A~2B6`Vzh(Xj# zBaStgQQ-li*%)NTxOFk}l*RS)MHKN8iZ&1>>9a$zk97hvWeRHJlj=tbMQO9=v5VSy zSBp1aj#{0L0gp~5MZIk|9?7siFcDZ2 zNc9R%VWBzDAaufQF8-tF=t$Bf#r4rk(4y|0n<}4A`B1v%=>A~uwhFLlC4#9P{!?q9 zy4f<()XpC;7z|TydtyRq)C-wnn>=p9)q{(4%y;zQ$NlmN9x21cz0y=id;+EgCsO9< z;)i4lhrTmLgcg#vXKxZ)&gb75<}Bb4IytN?+bEFE&<$tnZb>EYMP$=cszd-{bay^u zFnW0nzPZ&8OM-P7vG3c9<1$&;EgYe`gXoYnjuI!00*nn;E2|bJ97e?bqzFZh&Y_U5 zi~wor7PAoBE3SleguF`}O_Qgo0(tDa6?M(ormt2C%$&tLNfL9N)QRzpW}Dgk2x_az ziQU`dDbjzBml-6c-y^I%+#3e39|Ub?XJm=&^0Ci8Y7$|kWRH{uGL}}<1dogVwY&MO z7htQs7?HnsNwKkcO%Nl}CYhrzzM&jg$L<~KNQ~5h8qc+=OC5Hf+;&|)4$`psIZoVK zRZ!P*l7a2hd%1yJu!r;0REA3_>BbN<1j7_ z-Ou{63oI-VcQmmY>F>l8j}5{^QY6Zx&c1!0;nV3cWw2fKKgTMu1dCw8;gqJ38KMn%LD z=~?~R57T&;ul$76^3oErE1 zUzENjesMZoqRB$r7F5mAr*fo=mm~_im2UO66S!&^6h0Dq2TMomnfB4*0}5X2T@q%( zxofNumJ12P!tF+4^`@DiNEnbu3!Q0RZlmPsV=_niU^L}aj5<)(fv)G9;O&h3N|LPh z4A1iZA{VBDXd!(HLcUS(d?<)Vhvxgw?m1$YDgC@yTS|T_S)&lHY&l-G{o;pc9qzJ1 z8r`srzHLLk%BCE8{^d5%DiAb5=!AM~IG-=O6n0%~I8gF7aY;K$JjS7z}(b_TFV^_;c-Y)xqO@FPe_r*t=d z4j)%`>Z)cdcdNtRzzp;dGcL_dwAB~FX?}a-{St?5$1Yqml7X~KWhQd-zSYkp zOYbw&F&xVY)2CTUj=$Z#4VDCMW_cT8+wJzA8=7Eh>gBTSIj!Rd3b>@~BIJlD`2)<6 z3)O^gyk$z2%j;4u_HVGziDhb%l8^ROX8*~EemOx{@kjr z5Gg^e2(KE8J|y)xx}0v;7ielt$uOe@z+Kg&EYz29nLaygmPb}AB-m>`wsWQbJWi?c zj&Sa_cF+4E>7}PZ7QLjsfoap>Gs7tCzJW1s>9LPWDY<>oE`pbyHL=5}v)HDq;Zxg% zi9QvI@Dc1O2ajPuJsI>#;&72SQ!gMSK9Aep>qA}CVaI9lpjx(9E-%Ko0l4luCk-#a zu8WS5kuit?K-o=P#)6g@e$W~qwdhpz+oshFNplDf*%e24(yUHhiIw!X#;=)cUetFM zKvrgw9Ymb_x&7m9{C?e{K$=xnyP6MebGzb!tLJjHsCzlQ-THsklEAi%9V(CNeaDW%Y#4#9ShF>+yJ(R9<11*e9us)d*m z;Ui_BM?kHHIX6cCfr4}iAedBVdoCPdH^M8mS?KYA83o{#Eh!K_m(;mNT-I@-A`1xU zJ&*`|L%!!(P~zV7K$9~C`@a5`hdp;5m3b|4DvoSZsr3CFCtP2vh18-L&Fq%04|`;r zX1o|(;o^Xz?YEuqHC19#XJGp_yfR(|=XzM} z?=|+cTT`pmkNZC^7zFDuM85?|kfQjM8dz16y=f!*_0FVN3&@Fklw(MRAvlChI??_g zn11|TckMabj6KCF`U?4DTR`DsqF90)|GU!ri$(^(Nmm1q$%*R97%Vr0`klOIv!$fs zBy#zt`>y|Krg<8Rysj!cTn8V2YSR5f*jycg4?Sd-cB>juQTa53T~fqwh2<-N4j$st%5 zcSUlXw;g8@CLQeRzP%h@N=F(#3URLxYi0=B;f(dfa;EK_HBq=WwER)(ilO*f?`J=b zLA7=waA;A%A9pKMG0OWMmn@}N2z1+%qs{Be0I0R2zw!NHRo2uh#W6dVf{>w-0heC& zoM(&SYpu}v76jSp-XSTW{)J;qZ+pe~9nTxR`fyLj*h0W9;sVnvq}pWo?#! z6aKJ?9ll9x#)ef|ZRnn8!E8xXw{lz`%5HT8t%Yv gqe&~~>RHc?AoSb3I=RA+yv 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 Wz)YGDr?c1h5TwN9MazW^fBp~R)|dVO diff --git a/app/src/main/res/drawable/edittext_border.xml b/app/src/main/res/drawable/edittext_border.xml index 286696c..25b08e7 100644 --- a/app/src/main/res/drawable/edittext_border.xml +++ b/app/src/main/res/drawable/edittext_border.xml @@ -2,9 +2,8 @@ - - + android:width="1dp" + android:color="#fff" /> + \ 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 fe7c15d9ab0d8ce0ba0dbbb9a346f9b3940963dd..8ed56d198216b4f2e3fdf71d44486be73b065874 100644 GIT binary patch literal 9565 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 A@c;k- delta 3689 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 + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/spinner_selector.xml b/app/src/main/res/drawable/spinner_selector.xml new file mode 100644 index 0000000..65247f5 --- /dev/null +++ b/app/src/main/res/drawable/spinner_selector.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 887e66f..a309c6f 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -84,7 +84,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:maxLength="20" - android:text="admin" + android:text="18158863319" android:hint="@string/please_enter_username" android:textColorHint="#999999" android:inputType="textPersonName" @@ -120,7 +120,7 @@ android:layout_marginEnd="5dp" android:inputType="textPassword" android:paddingLeft="10dp" - android:text="Bonus$2031" /> + android:text="Bonus$2025" /> + + + + - 智慧食堂 + 智能留样柜 通用浏览器 更多 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 81ed013..abfbe70 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -85,4 +85,12 @@ 8dp +