Sfoglia il codice sorgente

fix: 修复某些情况下匹配到的串口号丢失的问题

huwanxiao 1 anno fa
parent
commit
9404351bc7

+ 291 - 255
app/src/main/java/com/naz/sdkdemo/MainActivity.java

@@ -76,6 +76,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
@@ -315,8 +316,8 @@ public class MainActivity extends BaseActivity {
         turnOnLight.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                if (serialPortManager != null){
-                    serialPortManager.turnOnLight(6);
+                if (lightPortManager != null){
+                    lightPortManager.turnOnLight(6);
                 }
             }
         });
@@ -324,10 +325,7 @@ public class MainActivity extends BaseActivity {
         closeLight.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                if (serialPortManager!=null){
-                    serialPortManager.close();
-                    serialPortManager = null;
-                }
+                toCloseLight();
             }
         });
 
@@ -370,7 +368,28 @@ public class MainActivity extends BaseActivity {
 
         Log.e("------->","-------->"+UserCache.getSerialName());
     }
-
+    // -------------------------------------WebInterface相关方法开始----------------------------
+    String mUrl = "https://dwytb.qingyaokeji.com/index.html#/";
+    private void checkNet() {
+        if (!MyTools.isNetworkAvailable(getApplicationContext())) {
+            ll_nonet.setVisibility(View.VISIBLE);
+            ll_web.setVisibility(View.GONE);
+        } else {
+            ll_nonet.setVisibility(View.GONE);
+            ll_web.setVisibility(View.VISIBLE);
+        }
+    }
+    private void getUrl() {
+        mWebView.loadUrl(mUrl);
+    }
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
+            mWebView.goBack();
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
     private AndroidInterface aIn;
 
     private class AndroidInterface {
@@ -402,9 +421,10 @@ public class MainActivity extends BaseActivity {
             if(!FastClickUtil.isFastClick()) {
                 toGetPortStatus();
                 new Handler().postDelayed(() -> {
-                    Log.i(TAG, "getPortStatus:" + JSONObject.toJSONString(requestParam));
-                    runOnUiThread(() -> mWebView.loadUrl("javascript:getPortStatus('" + JSONObject.toJSONString(requestParam) + "')"));
-                }, 8000);
+                    Log.i(TAG, "getPortStatus:" + JSONObject.toJSONString(portStatusParam));
+                    runOnUiThread(() -> mWebView.loadUrl("javascript:getPortStatus('" + JSONObject.toJSONString(portStatusParam) + "')"));
+                }, 9000);
+                // XToast.showToast("正在初始化串口");
             }
         }
 
@@ -494,24 +514,22 @@ public class MainActivity extends BaseActivity {
         @JavascriptInterface
         public void connectLight(String name) {
             Log.e(TAG, "connectLight");
-            toConnectLight(name);
+            if(!FastClickUtil.isFastClick()) {
+                toConnectLight(name);
+                // XToast.showToast("connectLight");
+            }
         }
 
         @JavascriptInterface
         public void controlLight(int address, int type) {
             Log.e(TAG, "openLight"+"address="+address+",type="+type);
-            if (serialPortManager != null){
-                serialPortManager.turnOnLight(address, type);
-            }
+            toOpenLight(address, type);
         }
 
         @JavascriptInterface
         public void disConnectLight() {
             Log.e(TAG, "closeLight");
-            if (serialPortManager!=null){
-                serialPortManager.close();
-                serialPortManager = null;
-            }
+            toCloseLight();
         }
 
         @JavascriptInterface
@@ -530,80 +548,26 @@ public class MainActivity extends BaseActivity {
         @JavascriptInterface
         public void connectPort(String name) {
             Log.e(TAG, "connectPort");
-            toConnectPort(name);
+            if(!FastClickUtil.isFastClick()) {
+              toConnectPort(name);
+              XToast.showToast("正在连接串口");
+            }
         }
 
         @JavascriptInterface
         public void disConnectPort(String name) {
             Log.e(TAG, "disConnectPort");
-            for (SerialPortManager port:mPortList) {
-                if (port.serialHelper.getPort().equals(name)) {
-                    port.close();
-                    return;
-                }
-            }
+            disconnectPortSingle(name);
         }
 
         @JavascriptInterface
         public void disConnectPortAll() {
-            Log.e(TAG, "disConnectPortAll");
-            mPortList.clear();
-//            for (SerialPortManager port:mPortList) {
-//                port.close();
-//            }
+            toDisconnectPortAll();
         }
     }
+    // -------------------------------------WebInterface相关方法结束----------------------------
 
-    private void toCloseCamera() {
-        // 如果相机预览还开着, 则关闭
-        cameraIsOpening = false;
-        if(previewViewLayout.getVisibility() == View.VISIBLE) {
-            previewViewLayout.setVisibility(View.GONE);
-        }
-        // 关闭的时候摄像头还在录像
-        if(recording!=null) {
-            openAndCloseVideo();
-        }
-        if (cameraProvider!=null){
-            cameraProvider.unbindAll();
-        }
-    }
-
-    private void toOpenCamera(boolean isShowPreview) {
-        cameraIsOpening = true;
-        // 请求 CameraProvider
-        cameraProviderFuture = ProcessCameraProvider.getInstance(this);
-        //检查 CameraProvider 可用性,验证它能否在视图创建后成功初始化
-        cameraProviderFuture.addListener(() -> {
-            try {
-                ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
-                bindPreview(cameraProvider, isShowPreview, 1);
-            } catch (Exception e) {
-                // No errors need to be handled for this Future.
-                // This should never be reached.
-                Log.i(TAG, "toOpenCamera: exception: " + e.getMessage());
-            }
-        }, ContextCompat.getMainExecutor(this));
-    }
-
-    private void toOpenRecorder(boolean isShowPreview) {
-        cameraIsOpening = true;
-        // 请求 CameraProvider
-        cameraProviderFuture = ProcessCameraProvider.getInstance(this);
-        //检查 CameraProvider 可用性,验证它能否在视图创建后成功初始化
-        cameraProviderFuture.addListener(() -> {
-            try {
-                ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
-                bindPreview(cameraProvider, isShowPreview, 2);
-            } catch (Exception e) {
-                // No errors need to be handled for this Future.
-                // This should never be reached.
-                Log.i(TAG, "toOpenRecorder: exception: " + e.getMessage());
-            }
-        }, ContextCompat.getMainExecutor(this));
-    }
-
-    // ------------------------获取usb口状态开始-------------------
+    // -------------------------------------获取usb口状态开始-----------------------------------
     private Handler sendCommandhandler = new Handler();
     private List<String> sendCommands = new ArrayList<String>(){
         {
@@ -611,13 +575,20 @@ public class MainActivity extends BaseActivity {
             add("A00000A0");
         }
     };
-    Set<String> scannerList;
-    Set<String> lightList;
-    JSONObject requestParam;
-    private synchronized void toGetPortStatus() {
-        scannerList = new HashSet<>();
-        lightList = new HashSet<>();
-        requestParam = new JSONObject();
+    Set<String> scannerList = new HashSet<>();
+    Set<String> lightList = new HashSet<>();
+    Map<String, Set<String>> portStatusParam = new HashMap<>();
+    private void toGetPortStatus() {
+        // 清除上次连接的数据
+        scannerList.clear();
+        lightList.clear();
+        portStatusParam.clear();
+        portStatusParam.put("scanners", scannerList);
+        portStatusParam.put("lights", lightList);
+        // 断开扫码头的连接
+        toDisconnectPortAll();
+        // 断开灯的连接
+        toCloseLight();
         // 遍历串口
         SerialPortFinder finder = new SerialPortFinder();
         // 保存能够连接上的串口
@@ -667,21 +638,21 @@ public class MainActivity extends BaseActivity {
                             if (data.contains("04D00000FF2C")) {
                                 Log.i(TAG, "查找USB SCANNER成功:" + seriesName + "-->" + data);
                                 scannerList.add(seriesName);
-                                requestParam.put("scanners", scannerList);
+                                portStatusParam.put("scanners", scannerList);
                             } else if(data.contains("A00000A0")) {
                                 Log.i(TAG, "查找USB Light成功:" + seriesName + "-->" + data);
                                 lightList.add(seriesName);
-                                requestParam.put("lights", lightList);
+                                portStatusParam.put("lights", lightList);
                             }
                         };
 
                         @Override
                         public void openCallBack(int code) {
                             if (code == 1) {
-                                Log.i(TAG, "findSpecificSeries2: " + "尝试打开连接" + seriesName + "成功...");
+                                Log.i(TAG, "findAllSpecificSeries: " + "尝试打开连接" + seriesName + "成功...");
                                 availableSeries.add(seriesName);
                             } else {
-                                Log.i(TAG, "findSpecificSeries2: " + "尝试打开连接" + seriesName + "失败...");
+                                Log.i(TAG, "findAllSpecificSeries: " + "尝试打开连接" + seriesName + "失败...");
                                 Toast.makeText(MainActivity.this, "串口未打开", Toast.LENGTH_SHORT).show();
                             }
                         }
@@ -751,7 +722,57 @@ public class MainActivity extends BaseActivity {
 
 
     }
-    // ------------------------获取usb口状态结束----------------------
+    // -------------------------------------获取usb口状态结束---------------------------------
+
+    // -------------------------------------拍照相关方法结束----------------------------------
+    private void toCloseCamera() {
+        // 如果相机预览还开着, 则关闭
+        cameraIsOpening = false;
+        if(previewViewLayout.getVisibility() == View.VISIBLE) {
+            previewViewLayout.setVisibility(View.GONE);
+        }
+        // 关闭的时候摄像头还在录像
+        if(recording!=null) {
+            openAndCloseVideo();
+        }
+        if (cameraProvider!=null){
+            cameraProvider.unbindAll();
+        }
+    }
+
+    private void toOpenCamera(boolean isShowPreview) {
+        cameraIsOpening = true;
+        // 请求 CameraProvider
+        cameraProviderFuture = ProcessCameraProvider.getInstance(this);
+        //检查 CameraProvider 可用性,验证它能否在视图创建后成功初始化
+        cameraProviderFuture.addListener(() -> {
+            try {
+                ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
+                bindPreview(cameraProvider, isShowPreview, 1);
+            } catch (Exception e) {
+                // No errors need to be handled for this Future.
+                // This should never be reached.
+                Log.i(TAG, "toOpenCamera: exception: " + e.getMessage());
+            }
+        }, ContextCompat.getMainExecutor(this));
+    }
+
+    private void toOpenRecorder(boolean isShowPreview) {
+        cameraIsOpening = true;
+        // 请求 CameraProvider
+        cameraProviderFuture = ProcessCameraProvider.getInstance(this);
+        //检查 CameraProvider 可用性,验证它能否在视图创建后成功初始化
+        cameraProviderFuture.addListener(() -> {
+            try {
+                ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
+                bindPreview(cameraProvider, isShowPreview, 2);
+            } catch (Exception e) {
+                // No errors need to be handled for this Future.
+                // This should never be reached.
+                Log.i(TAG, "toOpenRecorder: exception: " + e.getMessage());
+            }
+        }, ContextCompat.getMainExecutor(this));
+    }
 
     private void toTakePhoto(String path, String name) {
         Log.e("-------->","------>toTakePhoto");
@@ -841,6 +862,48 @@ public class MainActivity extends BaseActivity {
         }
     }
 
+    // 选择相机并绑定生命周期和用例
+    // bindType: 1-绑定照相机, 2-绑定录像机
+    private void bindPreview(@NonNull ProcessCameraProvider cp, boolean isShowPreview, int bindType) {
+        this.cameraProvider=cp;
+        Preview preview = new Preview.Builder()
+                .build();
+
+        @SuppressLint("UnsafeOptInUsageError")
+        CameraSelector cameraSelector = new CameraSelector.Builder()
+                .requireLensFacing(CameraSelector.LENS_FACING_BACK)//CameraSelector.LENS_FACING_EXTERNAL
+                .build();
+        // 打开摄像头的同时是否显示预览界面
+        if(isShowPreview) {
+            preview.setSurfaceProvider(previewView.getSurfaceProvider());
+            previewViewLayout.setVisibility(View.VISIBLE);
+        }
+        cameraProvider.unbindAll();//解绑组件
+        if(bindType == 1) {
+            // 创建一个 ImageCapture 对象,用于拍摄照片。
+            // 设置拍照模式为最小化延迟模式,这意味着拍照时将尽可能快地捕获图像。
+            videoCapture = null;
+            imageCapture = new ImageCapture.Builder()
+                    .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
+                    // 设置JPEG的质量为85%
+                    .setJpegQuality(85)
+                    .build();
+            cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, imageCapture);
+        }else if(bindType == 2) {
+            // 创建一个 videoCapture 对象,用于录像
+            // 打开后自动录像
+            boolean isAutoTake = true;
+            imageCapture = null;
+            Recorder recorder = new Recorder.Builder().build();
+            videoCapture = VideoCapture.withOutput(recorder);
+            cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, videoCapture);
+            if(isAutoTake) {
+                openAndCloseVideo();
+            }
+        }
+//        preview.setSurfaceProvider(previewView.getSurfaceProvider());
+    }
+
     boolean isStart = false;
     ExecutorService fixedThreadPool;
     private void savePicture(File file, String path, String name) {
@@ -863,31 +926,14 @@ public class MainActivity extends BaseActivity {
         }
     }
 
-    private void checkNet() {
-        if (!MyTools.isNetworkAvailable(getApplicationContext())) {
-            ll_nonet.setVisibility(View.VISIBLE);
-            ll_web.setVisibility(View.GONE);
-        } else {
-            ll_nonet.setVisibility(View.GONE);
-            ll_web.setVisibility(View.VISIBLE);
-        }
-    }
-
-    String mUrl = "http://192.168.1.115:8080/index.html#/";
-    private void getUrl() {
-        mWebView.loadUrl(mUrl);
-    }
-
-    @Override
-    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
-            mWebView.goBack();
-            return true;
-        }
-        return super.onKeyDown(keyCode, event);
+    public static String getImagePath(String imageName) {
+        File picturesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
+        File imageFile = new File(picturesDir, imageName);
+        return imageFile.exists() ? imageFile.getAbsolutePath() :"";
     }
+    // -------------------------------------拍照相关方法结束---------------------------------
 
-
+    // -------------------------------------打印相关方法开始---------------------------------
     static int mPot = 8;//mm转像素8倍
     static int mWFont = 24;//字体宽度
     static int mHFont = 24;//字体高度
@@ -1034,48 +1080,6 @@ public class MainActivity extends BaseActivity {
         }
     }
 
-    // 选择相机并绑定生命周期和用例
-    // bindType: 1-绑定照相机, 2-绑定录像机
-    private void bindPreview(@NonNull ProcessCameraProvider cp, boolean isShowPreview, int bindType) {
-        this.cameraProvider=cp;
-        Preview preview = new Preview.Builder()
-                .build();
-
-        @SuppressLint("UnsafeOptInUsageError")
-        CameraSelector cameraSelector = new CameraSelector.Builder()
-                .requireLensFacing(CameraSelector.LENS_FACING_BACK)//CameraSelector.LENS_FACING_EXTERNAL
-                .build();
-        // 打开摄像头的同时是否显示预览界面
-        if(isShowPreview) {
-           preview.setSurfaceProvider(previewView.getSurfaceProvider());
-           previewViewLayout.setVisibility(View.VISIBLE);
-        }
-        cameraProvider.unbindAll();//解绑组件
-        if(bindType == 1) {
-            // 创建一个 ImageCapture 对象,用于拍摄照片。
-            // 设置拍照模式为最小化延迟模式,这意味着拍照时将尽可能快地捕获图像。
-            videoCapture = null;
-            imageCapture = new ImageCapture.Builder()
-                    .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
-                    // 设置JPEG的质量为85%
-                    .setJpegQuality(85)
-                    .build();
-            cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, imageCapture);
-        }else if(bindType == 2) {
-            // 创建一个 videoCapture 对象,用于录像
-            // 打开后自动录像
-            boolean isAutoTake = true;
-            imageCapture = null;
-            Recorder recorder = new Recorder.Builder().build();
-            videoCapture = VideoCapture.withOutput(recorder);
-            cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, videoCapture);
-            if(isAutoTake) {
-                openAndCloseVideo();
-            }
-        }
-//        preview.setSurfaceProvider(previewView.getSurfaceProvider());
-    }
-
     public static int getStrLength(String xm){
         int xmLength = 0;
         for (int i = 0; i < xm.length(); i++) {
@@ -1165,77 +1169,9 @@ public class MainActivity extends BaseActivity {
         }
         return isChinese;
     }
+    // -------------------------------------------------打印相关方法结束-----------------------------------
 
-    public static String getImagePath(String imageName) {
-        File picturesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
-        File imageFile = new File(picturesDir, imageName);
-        return imageFile.exists() ? imageFile.getAbsolutePath() :"";
-    }
-
-    private static final int REQUEST_CODE_OPEN_GPS = 1;
-    private static final int REQUEST_CODE_PERMISSION_LOCATION = 2;
-    private void checkPermissions(String name) {
-        bleName = name;
-        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-        if (!bluetoothAdapter.isEnabled()) {
-            Toast.makeText(this, getString(R.string.please_open_blue), Toast.LENGTH_LONG).show();
-            return;
-        }
-
-        String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};
-        List<String> permissionDeniedList = new ArrayList<>();
-        for (String permission : permissions) {
-            int permissionCheck = ContextCompat.checkSelfPermission(this, permission);
-            if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
-                onPermissionGranted(permission);
-            } else {
-                permissionDeniedList.add(permission);
-            }
-        }
-        if (!permissionDeniedList.isEmpty()) {
-            Log.e("------->","----->checkPermissions permissionDeniedList="+permissionDeniedList);
-            String[] deniedPermissions = permissionDeniedList.toArray(new String[permissionDeniedList.size()]);
-            ActivityCompat.requestPermissions(this, deniedPermissions, REQUEST_CODE_PERMISSION_LOCATION);
-        }
-    }
-
-    private void onPermissionGranted(String permission) {
-        Log.e("------->","----->onPermissionGranted permission="+permission);
-        switch (permission) {
-            case Manifest.permission.ACCESS_FINE_LOCATION:
-                setScanRule();
-                startScan(bleName);
-//                Log.e("------->","----->checkGPSIsOpen="+checkGPSIsOpen());
-//                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !checkGPSIsOpen()) {
-//                    new AlertDialog.Builder(this)
-//                            .setTitle(R.string.notifyTitle)
-//                            .setMessage(R.string.gpsNotifyMsg)
-//                            .setNegativeButton(R.string.cancel,
-//                                    new DialogInterface.OnClickListener() {
-//                                        @Override
-//                                        public void onClick(DialogInterface dialog, int which) {
-//                                            finish();
-//                                        }
-//                                    })
-//                            .setPositiveButton(R.string.setting,
-//                                    new DialogInterface.OnClickListener() {
-//                                        @Override
-//                                        public void onClick(DialogInterface dialog, int which) {
-//                                            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
-//                                            startActivityForResult(intent, REQUEST_CODE_OPEN_GPS);
-//                                        }
-//                                    })
-//
-//                            .setCancelable(false)
-//                            .show();
-//                } else {
-//                    setScanRule();
-//                    startScan(bleName);
-//                }
-                break;
-        }
-    }
-
+    // -------------------------------------------------蓝牙相关方法开始-----------------------------------
     //关闭蓝牙扫码器
     BleDevice mBleDevice;
     BluetoothGattCharacteristic mCharacteristic;
@@ -1249,27 +1185,6 @@ public class MainActivity extends BaseActivity {
             BleManager.getInstance().removeConnectGattCallback(mBleDevice);
         }
     }
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        if (requestCode == REQUEST_CODE_OPEN_GPS) {
-//            if (checkGPSIsOpen()) {
-                setScanRule();
-                startScan(bleName);
-//            }
-        }
-    }
-
-    @Override
-    public void onBackPressed() {
-        if(cameraIsOpening) {
-            // 当前的摄像头正在打开状态
-            toCloseCamera();
-            return;
-        }
-        super.onBackPressed();
-    }
-
     private boolean checkGPSIsOpen() {
 //        LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
 //        if (locationManager == null)
@@ -1430,7 +1345,9 @@ public class MainActivity extends BaseActivity {
             }
         });
     }
+    // --------------------------蓝牙相关方法结束--------------------------
 
+    // --------------------------打印机相关方法结束--------------------------
     public String hexStringToGbk(String hexString) {
         byte[] bytes = new byte[hexString.length() / 2];
         for (int i = 0; i < hexString.length(); i += 2) {
@@ -1472,7 +1389,9 @@ public class MainActivity extends BaseActivity {
             curConnect.close();
         }
     }
+    // --------------------------打印机相关方法结束--------------------------
 
+    // --------------------------灯相关的方法开始----------------------------
     private IConnectListener connectListener = new IConnectListener() {
         @Override
         public void onStatus(int code, String connInfo, String msg) {
@@ -1504,13 +1423,12 @@ public class MainActivity extends BaseActivity {
             }
         }
     };
-
-    private SerialPortManager serialPortManager;
+    private SerialPortManager lightPortManager;
 
     private void toConnectLight(String name){
-        if (serialPortManager == null){
-            serialPortManager = new SerialPortManager();
-            serialPortManager.init(MainActivity.this, name, UserCache.getSerialRate(), new SerialPortManager.SerialCallBack() {
+        if (lightPortManager == null){
+            lightPortManager = new SerialPortManager();
+            lightPortManager.init(MainActivity.this, name, UserCache.getSerialRate(), new SerialPortManager.SerialCallBack() {
                 @Override
                 public void dataCallBack(String data) {
                     Log.e("--------->","------->data="+data);
@@ -1538,10 +1456,25 @@ public class MainActivity extends BaseActivity {
                 }
             });
         }else {
-            serialPortManager.open();
+            lightPortManager.open();
         }
     }
 
+    private void toCloseLight() {
+        if (lightPortManager !=null){
+            lightPortManager.close();
+            lightPortManager = null;
+        }
+    }
+    private void toOpenLight(int address, int type) {
+        if (lightPortManager != null){
+            lightPortManager.turnOnLight(address, type);
+        }
+    }
+
+    // ------------------------------灯相关的方法结束--------------------------------------
+
+    // ------------------------------连接及断开除灯之外的其他串口的相关方法开始------------------
     private List<SerialPortManager> mPortList = new ArrayList<>();
     private void toConnectPort(String name){
         Log.i("===","------->toConnectPort name="+name);
@@ -1617,7 +1550,24 @@ public class MainActivity extends BaseActivity {
         }
         Log.i("===","------->toConnectPort end="+name);
     }
-
+    private void toDisconnectPortAll() {
+        Log.e(TAG, "disConnectPortAll");
+        if(mPortList.size()>0) {
+            for (SerialPortManager port:mPortList) {
+                port.close();
+            }
+            mPortList.clear();
+        }
+    }
+    private void disconnectPortSingle(String name) {
+        for (SerialPortManager port:mPortList) {
+            if (port.serialHelper.getPort().equals(name)) {
+                port.close();
+                return;
+            }
+        }
+    }
+    // ------------------------------连接及断开除灯之外的其他串口的相关方法开始------------------
     @Override
     protected void onDestroy() {
         super.onDestroy();
@@ -1628,4 +1578,90 @@ public class MainActivity extends BaseActivity {
             fixedThreadPool.shutdown();
         }
     }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (requestCode == REQUEST_CODE_OPEN_GPS) {
+//            if (checkGPSIsOpen()) {
+            setScanRule();
+            startScan(bleName);
+//            }
+        }
+    }
+
+    @Override
+    public void onBackPressed() {
+        if(cameraIsOpening) {
+            // 当前的摄像头正在打开状态
+            toCloseCamera();
+            return;
+        }
+        super.onBackPressed();
+    }
+
+
+    private static final int REQUEST_CODE_OPEN_GPS = 1;
+    private static final int REQUEST_CODE_PERMISSION_LOCATION = 2;
+    private void checkPermissions(String name) {
+        bleName = name;
+        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        if (!bluetoothAdapter.isEnabled()) {
+            Toast.makeText(this, getString(R.string.please_open_blue), Toast.LENGTH_LONG).show();
+            return;
+        }
+
+        String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION};
+        List<String> permissionDeniedList = new ArrayList<>();
+        for (String permission : permissions) {
+            int permissionCheck = ContextCompat.checkSelfPermission(this, permission);
+            if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
+                onPermissionGranted(permission);
+            } else {
+                permissionDeniedList.add(permission);
+            }
+        }
+        if (!permissionDeniedList.isEmpty()) {
+            Log.e("------->","----->checkPermissions permissionDeniedList="+permissionDeniedList);
+            String[] deniedPermissions = permissionDeniedList.toArray(new String[permissionDeniedList.size()]);
+            ActivityCompat.requestPermissions(this, deniedPermissions, REQUEST_CODE_PERMISSION_LOCATION);
+        }
+    }
+
+    private void onPermissionGranted(String permission) {
+        Log.e("------->","----->onPermissionGranted permission="+permission);
+        switch (permission) {
+            case Manifest.permission.ACCESS_FINE_LOCATION:
+                setScanRule();
+                startScan(bleName);
+//                Log.e("------->","----->checkGPSIsOpen="+checkGPSIsOpen());
+//                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !checkGPSIsOpen()) {
+//                    new AlertDialog.Builder(this)
+//                            .setTitle(R.string.notifyTitle)
+//                            .setMessage(R.string.gpsNotifyMsg)
+//                            .setNegativeButton(R.string.cancel,
+//                                    new DialogInterface.OnClickListener() {
+//                                        @Override
+//                                        public void onClick(DialogInterface dialog, int which) {
+//                                            finish();
+//                                        }
+//                                    })
+//                            .setPositiveButton(R.string.setting,
+//                                    new DialogInterface.OnClickListener() {
+//                                        @Override
+//                                        public void onClick(DialogInterface dialog, int which) {
+//                                            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
+//                                            startActivityForResult(intent, REQUEST_CODE_OPEN_GPS);
+//                                        }
+//                                    })
+//
+//                            .setCancelable(false)
+//                            .show();
+//                } else {
+//                    setScanRule();
+//                    startScan(bleName);
+//                }
+                break;
+        }
+    }
 }

+ 1 - 1
app/src/main/java/com/naz/sdkdemo/utils/FastClickUtil.java

@@ -3,7 +3,7 @@ package com.naz.sdkdemo.utils;
 public class FastClickUtil {
 
     private static long lastClickTime;//记录最近一次点击时间
-    private static long interval = 30000;//间隔为10
+    private static long interval = 15000;//间隔为15
     private static int lastButtonId;//存放最近一次传入的按钮id
 
     // 不需要传入任何参数 直接在点击事件下调用此方法即可