我正在使用一个线程来检查pendrive是否被锥形化,在两个状态之间切换EMPTY / READY
@Override
public void run() {
running = true;
while(running){ // forever
try {
Delay.of_1second();
drivePath = getDrivePath(rootPath);
if (isReady() && drivePath==null){
notifyNewState(DriveState.EMPTY);
}
else if (!isReady() && drivePath!=null){
notifyNewState(DriveState.READY);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
private String getDrivePath(String rootPath){
File file = new File(rootPath);
if (SystemUtils.IS_OS_WINDOWS){
return file.exists() ? rootPath : null;
}
else{
for (File f : file.listFiles()){
if (!f.getName().equalsIgnoreCase("CDROM")){
return f.getAbsolutePath(); // we return the first folder other than 'CDROM'
}
}
}
return null;
}
它在Windows中使用rootPath =" E:\",但在Ubuntu rootPath =" / media / ubuntu"中不起作用,这是我的奇怪点仍然不明白的是,如果我在文件管理器中打开pendrive 线程工作正常,但我需要它在pendrive插入usb端口时工作,而不是当用户浏览时文件管理器的文件。我该怎么办?
答案 0 :(得分:0)
在Linux机器上,我可以想到两个命令,它们为您提供有关插入哪些设备的有用信息。第一个是lsusb
。当我在我的机器上运行时:
Bus 002 Device 003: ID 8086:0189 Intel Corp.
Bus 002 Device 021: ID 0718:061a Imation Corp.
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
...
第二行是我的笔式驱动器。 另一个命令是dmesg
[148541.700254] sd 8:0:0:0: [sdb] Attached SCSI removable disk
[148830.993250] usb 2-1.2: USB disconnect, device number 21
[148836.316642] usb 2-1.2: new high-speed USB device number 22 using ehci-pci
[148836.415145] usb 2-1.2: New USB device found, idVendor=..., idProduct=....
[148836.415157] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[148836.415162] usb 2-1.2: Product: iPhone
[148836.415167] usb 2-1.2: Manufacturer: Apple Inc.
[148836.415171] usb 2-1.2: SerialNumber: ....
[148836.894819] ipheth 2-1.2:4.2: Apple iPhone USB Ethernet device attached
您可以将程序设置为轮询其中任何一个命令并解析输出,即使用Runtime.getRuntime().exec("dmesg)"
。
我认为这个解决方案是一种解决方案,我想有很多其他可能的方法来检测何时连接USB驱动器。