Browse Source

优化身份证读取方式

Shangyp 11 months ago
parent
commit
fe92d2937f

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -131,6 +131,7 @@
             android:exported="true">
             <intent-filter>
                 <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
+                <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
             </intent-filter>
             <meta-data
                 android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"

+ 3 - 1
app/src/main/java/com/telpo/facenormal/USBroadcastReceiver.java

@@ -18,8 +18,10 @@ public class USBroadcastReceiver extends BroadcastReceiver {
     public void onReceive(Context arg0, Intent intent) {
         // TODO Auto-generated method stub
         String action = intent.getAction();
-        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
+        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {//插入广播监听
             EventBus.getDefault().post(new WebSocketEvent(-1,"USBReceiveSignal"));
+        }else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)){//拔出广播监听
+            EventBus.getDefault().post(new WebSocketEvent(-1,"ENUSBReceiveSignal"));
         }
 
     }

+ 28 - 11
app/src/main/java/com/telpo/facenormal/activity/MainActivity.java

@@ -428,6 +428,15 @@ import static com.telpo.facenormal.utile.Config.CheckList;
     //新中新身份证阅读器
     IDCardReaderThread idCardReaderThread;
     final int UPDATE_READER_STATUS = 0x40;
+     private Handler newIdCardStrarHandler = new Handler();
+     private Runnable newIdCardStrarRunnable = new Runnable() {
+         @Override
+         public void run() {
+             if(Config.getAuthenticationBean().getData().get(0).isUseIdcard()){
+                 idCardReaderThread.read();
+             }
+         }
+     };
     Handler newIdCardHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
@@ -444,14 +453,9 @@ import static com.telpo.facenormal.utile.Config.CheckList;
                     if (idCardReaderThread!=null){
                         idCardReaderThread.close();
                     }
-                    new Handler().postDelayed(new Runnable() {
-                        @Override
-                        public void run() {
-                            if(Config.getAuthenticationBean().getData().get(0).isUseIdcard()){
-                                idCardReaderThread.read();
-                            }
-                        }
-                    },5*1000);
+                    newIdCardStrarHandler.removeCallbacks(newIdCardStrarRunnable);
+                    newIdCardStrarHandler.removeCallbacksAndMessages(null);
+                    newIdCardStrarHandler.postDelayed(newIdCardStrarRunnable,5*1000);
                     break;
                 case DeviceConnectManager.MESSAGE_DISCONNECTED:
                     AppLogUtils.i(true, "newIdCardHandler_新中新身份证阅读器",devName + "新版身份证阅读器连接断开");
@@ -2922,12 +2926,25 @@ import static com.telpo.facenormal.utile.Config.CheckList;
             AppLogUtils.e(true, "USB广播信号","重新尝试与新版身份证阅读器建立连接");
             if (!(Build.MODEL.indexOf("F2")!=-1|(Build.MODEL.indexOf("TPS980")!=-1))&&
                     !Config.getAuthenticationBean().getData().get(0).getUserOutputMode().equals("AnalogSignal")){
-                if (idCardReaderThread!=null){
+                try {
+                    newIdCardStrarHandler.removeCallbacks(newIdCardStrarRunnable);
+                    newIdCardStrarHandler.removeCallbacksAndMessages(null);
+                    newIdCardStrarHandler.postDelayed(newIdCardStrarRunnable,0);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        } else if (eve.getMsg().equals("DEUSBReceiveSignal")) {
+            AppLogUtils.e(true, "USB广播信号","接收到USB拔出广播信号");
+            if (!(Build.MODEL.indexOf("F2")!=-1|(Build.MODEL.indexOf("TPS980")!=-1))&&
+                    !Config.getAuthenticationBean().getData().get(0).getUserOutputMode().equals("AnalogSignal")){
+                try {
+                    idCardReaderThread.stop();
                     idCardReaderThread.close();
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
                 }
-                idCardReaderThread.read();
             }
-
         } else {
             if (LoadingLocally_NumberOfVisitors != null) {
                 LoadingLocally_NumberOfVisitors.setText(Config.openTimes + "/" + Config.PassableOpenTimes);

+ 1 - 1
gradle.properties

@@ -7,7 +7,7 @@
 # Specifies the JVM arguments used for the daemon process.
 # The setting is particularly useful for tweaking memory settings.
 #org.gradle.jvmargs=-Xmx512m -XX:MaxPermSize=512m
-org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
 org.gradle.parallel=true
 org.gradle.daemon=true
 # When configured, Gradle will run in incubating parallel mode.