监听Android usb的事件

时间:2024-03-13 10:24:45

有时候手机可能会连接到usb ,需要去监听usb是否有指令传出

 adb shell 进入执行  cat  /proc/bus/input/devices   

查看所有usb设备  

监听Android usb的事件

USB外接输入设备信息含义如下:

I: Bus=0019 Vendor=0002 Product=0001 Version=0100 //在Android设备与USB设备数据交互的是否使用到。

N: Name="vmouse"  //外接的USB设备的名称。

H: Handlers=mouse event0 //输入设备监听事件

P: Phys=vmouse/input0

S: Sysfs=/devices/virtual/input/input0

这两行可用于识别该USB设备连接在Android设备的哪一个USB口.
 

通过上面的查询 ,我们 就能查询到具体的设备   上面图片

Handlers=mouse event0 / //输入设备监听事件

我们监听event0  就行

输入指令getevent  /dev/input/event0  进行监听

监听Android usb的事件

//通过上面的方法后就可以  查看到 具体要查看的usb接口了  那么在android中怎么去读取传入的值呢

public class MyThread implements Runnable {
    int count = 1, number;
    UsbManager mUsbManager;

    public MyThread(int num, UsbManager usbManager) {
        number = num;
        System.out.println("创建线程" + number);
        mUsbManager = usbManager;
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public void run() {
        while (true) {
            System.out.println("线程" + number + ":计数" + count);
            HashMap<String, UsbDevice> deviceHashMap = mUsbManager.getDeviceList();
            Iterator<UsbDevice> iterator = deviceHashMap.values().iterator();

            System.out.println("deviceHashMap.isEmpty()" + deviceHashMap.isEmpty());

            while (iterator.hasNext()) {
                UsbDevice usbDevice = iterator.next();
                UsbInterface usbInterface = usbDevice.getInterface(0);//USBEndpoint为读写数据所需的节点
                UsbEndpoint inEndpoint = usbInterface.getEndpoint(0);  //读数据节点
                UsbDeviceConnection connection = mUsbManager.openDevice(usbDevice);
                connection.claimInterface(usbInterface, true);
                String name = usbDevice.getProductName();
                if (name .equals("USB2.0 Camera") ) {
                    System.out.println("ret" + name);

                }
                //发送数据
                byte[] byte2 = new byte[1024];

                //读取数据1   两种方法读取数据
                int ret = connection.bulkTransfer(inEndpoint, byte2, byte2.length, 3000);
                System.out.println("ret");
//                Log.i("ret", "ret:" + ret);
//                Log.i("ret", "bat is ok  length:" + byte2.length);
                StringBuilder stringBuilder = new StringBuilder();
                for (Byte byte1 : byte2) {
                    stringBuilder.append(byte1 + "");
                }
                if (name .equals("USB2.0 Camera") ) {
                    Log.i("ret", "byte1 :" + stringBuilder.toString());
                }

            }
        }
    }
}
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
     
        UsbManager usbManager = (UsbManager)getSystemService(Context.USB_SERVICE); 
        new Thread(new MyThread(1,usbManager)).start(); //启动线程

    }

亲测 可行

===========================================================================================

 

 

 

相关文章