tag v0.3.4
[rtmpclient.git] / app / src / main / java / ai / suanzi / rtmpclient / UsbMonitor.java
index 61481ee..c874ba5 100644 (file)
@@ -28,10 +28,6 @@ public class UsbMonitor {
         mContext = context;
         mUsbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
 
-        HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
-        gLogger.error("device list size : " + deviceList.size());
-        Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
-        //PendingIntent mPermissionIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);
         IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED);
         mContext.registerReceiver(mUsbReceiver, filter);
         filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED);
@@ -39,6 +35,17 @@ public class UsbMonitor {
         filter = new IntentFilter(ACTION_USB_PERMISSION);
         mContext.registerReceiver(mUsbReceiver, filter);
 
+        HashMap<String, UsbDevice> deviceList;
+        try {
+            deviceList = mUsbManager.getDeviceList();
+        } catch (NullPointerException e) {
+            gLogger.error(e.getMessage());
+            e.printStackTrace();
+            return;
+        }
+        gLogger.error("device list size : " + deviceList.size());
+        Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
+        //PendingIntent mPermissionIntent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);
         while (deviceIterator.hasNext()) {
             UsbDevice device = deviceIterator.next();
             gLogger.error(device.toString());
@@ -47,13 +54,18 @@ public class UsbMonitor {
             //mUsbManager.requestPermission(device, mPermissionIntent);
     }
 
+    public void unregisterReceiver (){
+        mContext.unregisterReceiver(mUsbReceiver);
+    }
+
     private boolean isUvcCamera(UsbDevice device){
-        return (device.getDeviceProtocol() == 1 && device.getProductName().contains("Camera"));
+        if((device == null) || (device.getProductName() == null)) return false;
+        return device.getProductName().toLowerCase().contains("camera") || (device.getDeviceProtocol() == 1);
     }
 
     public boolean hasUsbCamera(){
         gLogger.error("hasUsbCamera - size: " + mUsbCameraList.size());
-        return (mUsbCameraList.size() > 0 ? true : false);
+        return mUsbCameraList.size() > 0;
     }
 
     public int getUsbCameraCount(){
@@ -88,7 +100,7 @@ public class UsbMonitor {
                     gLogger.error(device.toString());
                     if(isUvcCamera(device)) {
                         mUsbCameraList.remove(device);
-                        mListener.onCameraConnected();
+                        mListener.onCameraDisconnected();
                     }
                 }
             } else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
@@ -97,7 +109,7 @@ public class UsbMonitor {
                 gLogger.error(device.toString());
                 if(isUvcCamera(device)) {
                     mUsbCameraList.add(device);
-                    mListener.onCameraDisconnected();
+                    mListener.onCameraConnected();
                 }
             }
         }