美文网首页
Android根据pid vid 判断是什么类型摄像头

Android根据pid vid 判断是什么类型摄像头

作者: mapleSeriesX | 来源:发表于2019-12-27 09:51 被阅读0次
    import android.content.Context;
    import android.hardware.usb.UsbDevice;
    import android.hardware.usb.UsbManager;
    
    import java.util.HashMap;
    
    /**
     * 判断该摄像头是否具备红外模组 并返回摄像头下标
     * Created by maple on 2019-12-16 09:46
     * E-Mail Address:740917401@qq.com
     */
    public class CameraUtils {
    
        /**
         * @param context 上下文
         * @param isColor true:彩色摄像头下标 false:红外摄像头下标
         * @return index:摄像头下标
         */
        public static CameraBean isColorAndIrCamera(Context context, boolean isColor) {
            try {
                UsbManager manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
                HashMap<String, UsbDevice> usbList = manager.getDeviceList();
                int index;
                int colorIndex = -1;
                int irIndex = -1;
                for (String key : usbList.keySet()) {
                    UsbDevice usbDevice = usbList.get(key);
                     //Log.e("CameraBean", "pid:" + usbDevice.getProductId() + " vid:" + usbDevice.getVendorId() +
    //" isColor:"+isColor+" "+  " getDeviceName:"+usbDevice.getDeviceName());
                    if (usbDevice != null) {
                        if (usbDevice.getProductId() == 304 && usbDevice.getVendorId() == 6257) {
                            String[] split = usbDevice.getDeviceName().split("/");
                            colorIndex = Integer.parseInt(split[split.length - 2]);
                        }
                        if (usbDevice.getProductId() == 25446
                                && usbDevice.getVendorId() == 3141) {
                            String[] split = usbDevice.getDeviceName().split("/");
                            irIndex = Integer.parseInt(split[split.length - 2]);
                        }
    
                    }
    
                }
                //不是红外模组
                if (colorIndex == -1 && irIndex == -1) {
                    return new CameraBean(false);
                } else {
        /**比较倒数第二项 作为usb端口 通电后先读取地位端口 即:001 先 004 后 所以 cameraIndex 001的是0 cameraIndex 004的是1
                     * 彩色摄像头 pid:304 vid:6257 isColor:true  getDeviceName:/dev/bus/usb/004/002
                     * 红外摄像头 pid:25446 vid:3141 isColor:true  getDeviceName:/dev/bus/usb/001/003
                     * **/
                    if (isColor) {//彩色摄像头的下标
                        index = colorIndex > irIndex ? 1 : 0;
                    } else {//红外摄像头的下标
                        index = irIndex > colorIndex ? 1: 0;
                    }
                     //Log.e("CameraBean", " index:"+index+" isColor:"+isColor);
                    return new CameraBean(index, true);
                }
            } catch (Exception e) {
                Log.e("CameraUtils", e.getLocalizedMessage());
            }
            return new CameraBean(false);
        }
    
        public static class CameraBean {
            int cameraIndex;//摄像头下标
            boolean isColorAndIrCamera;//是否具备红外模组的摄像头
    
            public CameraBean(int cameraIndex, boolean isColorAndIrCamera) {
                this.cameraIndex = cameraIndex;
                this.isColorAndIrCamera = isColorAndIrCamera;
            }
    
            public CameraBean(boolean isColorAndIrCamera) {
                this.isColorAndIrCamera = isColorAndIrCamera;
            }
    
            public int getCameraIndex() {
                return cameraIndex;
            }
    
            public boolean isColorAndIrCamera() {
                return isColorAndIrCamera;
            }
    
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Android根据pid vid 判断是什么类型摄像头

          本文链接:https://www.haomeiwen.com/subject/rlurnctx.html