有时候手机可能会连接到usb ,需要去监听usb是否有指令传出
adb shell 进入执行 cat /proc/bus/input/devices
查看所有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 进行监听
//通过上面的方法后就可以 查看到 具体要查看的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(); //启动线程
}
亲测 可行
===========================================================================================