|
|
@@ -45,21 +45,18 @@ public class ScanService extends Service {
|
|
|
private final BroadcastReceiver screenReceiver = new BroadcastReceiver() {
|
|
|
@Override
|
|
|
public void onReceive(Context context, Intent intent) {
|
|
|
- if (intent == null || intent.getAction() == null || !isScanHeadOpened()) return;
|
|
|
+ if (intent == null || intent.getAction() == null) return;
|
|
|
|
|
|
switch (intent.getAction()) {
|
|
|
case Intent.ACTION_SCREEN_ON:
|
|
|
- // 屏幕亮起 - 若处于扫描中,恢复解码并重置单次超时
|
|
|
- if (isScanning) {
|
|
|
- resumeScan();
|
|
|
- resetSingleTimeout();
|
|
|
- }
|
|
|
+ // 屏幕亮起 - 重新打开扫描头
|
|
|
+ Log.d(TAG, "屏幕亮起");
|
|
|
+ openScanHead();
|
|
|
break;
|
|
|
case Intent.ACTION_SCREEN_OFF:
|
|
|
- // 屏幕熄灭 - 暂停解码,保留扫描头
|
|
|
- if (isScanning) {
|
|
|
- pauseScan();
|
|
|
- }
|
|
|
+ // 屏幕熄灭 - 关闭扫描头
|
|
|
+ Log.d(TAG, "屏幕熄灭");
|
|
|
+ closeScanHead();
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
@@ -156,12 +153,6 @@ public class ScanService extends Service {
|
|
|
* 逻辑:初始化扫描硬件+注册广播+启动闲置超时+默认开启瞄准灯
|
|
|
*/
|
|
|
public boolean openScanHead() {
|
|
|
- if (isScanHeadOpened()) {
|
|
|
- Log.w(TAG, "扫描头已打开,无需重复调用");
|
|
|
- resetIdleTimeout(); // 重置闲置超时
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
// 1. 懒加载初始化扫描管理器
|
|
|
lazyInitScanManager();
|
|
|
if (scanManager == null) {
|
|
|
@@ -171,15 +162,29 @@ public class ScanService extends Service {
|
|
|
setDefaultParams();
|
|
|
// 2. 打开扫描头硬件
|
|
|
scanManager.openScanner();
|
|
|
- while (!scanManager.isScannerOpen()) {
|
|
|
+ int retryCount = 0;
|
|
|
+ while (!scanManager.isScannerOpen() && retryCount < 10) {
|
|
|
Thread.sleep(50);
|
|
|
+ retryCount++;
|
|
|
+ }
|
|
|
+ if (!scanManager.isScannerOpen()) {
|
|
|
+ Log.e(TAG, "扫描头打开超时");
|
|
|
+ return false;
|
|
|
}
|
|
|
// 3. 设置默认灯光(照明+瞄准)
|
|
|
setLightingMode(DEFAULT_LIGHT_MODE);
|
|
|
// 4. 设置广播模式
|
|
|
scanManager.setOPMode(ScanConstants.SCAN_OP_MODE_BROADCAST);
|
|
|
- // 5. 注册广播接收器
|
|
|
- registerScanReceivers();
|
|
|
+ // 5. 注册广播接收器(只在第一次打开时注册)
|
|
|
+ if (screenReceiver != null && scanReceiver != null) {
|
|
|
+ try {
|
|
|
+ unregisterReceiver(screenReceiver);
|
|
|
+ unregisterReceiver(scanReceiver);
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 忽略注销异常
|
|
|
+ }
|
|
|
+ registerScanReceivers();
|
|
|
+ }
|
|
|
|
|
|
// 6. 启动扫描头闲置超时(核心调整:打开扫描头就启动)
|
|
|
startIdleTimeout();
|
|
|
@@ -279,10 +284,7 @@ public class ScanService extends Service {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 4. 注销广播接收器
|
|
|
- unregisterScanReceivers();
|
|
|
-
|
|
|
- // 5. 更新状态
|
|
|
+ // 4. 更新状态
|
|
|
isScanning = false;
|
|
|
}
|
|
|
|
|
|
@@ -299,6 +301,7 @@ public class ScanService extends Service {
|
|
|
|
|
|
// 1. 若扫描头未打开,自动打开
|
|
|
if (!isScanHeadOpened()) {
|
|
|
+ Log.d(TAG, "自动打开扫描头");
|
|
|
boolean openSuccess = openScanHead();
|
|
|
if (!openSuccess) {
|
|
|
return false;
|
|
|
@@ -444,6 +447,8 @@ public class ScanService extends Service {
|
|
|
Log.e(TAG, "暂停扫码失败", e);
|
|
|
}
|
|
|
}
|
|
|
+ // 确保在暂停后将扫描状态设置为false,以便在屏幕亮起后能重新开始扫描
|
|
|
+ isScanning = false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -456,7 +461,12 @@ public class ScanService extends Service {
|
|
|
Log.d(TAG, "扫码已恢复(屏幕亮起)");
|
|
|
} catch (Exception e) {
|
|
|
Log.e(TAG, "恢复扫码失败", e);
|
|
|
+ // 出错时重置扫描状态,以便下次可以重新开始扫描
|
|
|
+ isScanning = false;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ // 如果扫描头未打开,重置状态
|
|
|
+ isScanning = false;
|
|
|
}
|
|
|
}
|
|
|
|