1,USB存储设备监听(如:U盘,移动硬盘):
//USB存储设备 插拔监听与 SD卡插拔监听一致。
private USBBroadCastReceiver mBroadcastReceiver;
IntentFilter iFilter =
new
IntentFilter();
iFilter.addAction(Intent.ACTION_MEDIA_EJECT);
iFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
iFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
iFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
iFilter.addDataScheme(
"file"
);
mBroadcastReceiver =
new
USBBroadCastReceiver();
registerReceiver(mBroadcastReceiver, iFilter);
private class USBBroadCastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if
(action.equals(Intent.ACTION_MEDIA_EJECT)) {
//USB设备移除,更新UI
}
else
if
(action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
//USB设备挂载,更新UI
}
}
}
|
2.获得挂载的USB设备的存储空间使用情况
StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况
StatFs 常用方法:
getAvailableBlocks()
|
返回 Int ,获取当前可用的存储空间
|
getBlockCount()
|
返回 Int ,获取该区域可用的文件系统数
|
getBlockSize()
|
返回 Int ,大小,以字节为单位,一个文件系统
|
getFreeBlocks()
|
返回 Int ,该块区域剩余的空间
|
restat(String path)
|
执行一个由该对象所引用的文件系统
|
// 获得挂载的USB设备的存储空间使用情况
public static String getAvailableStore(Context context,String filePath) {
// 取得sdcard文件路径
StatFs statFs =
new
StatFs(filePath);
// 获取block的SIZE
long blocSize = statFs.getBlockSize();
// 获取BLOCK总数量
long totalBlocks = statFs.getBlockCount();
// 可使用的Block的数量
long availaBlock = statFs.getAvailableBlocks();
// long total = totalBlocks * blocSize;
long availableSpare = availaBlock * blocSize;
String usedSize = Formatter.formatFileSize(context, (totalBlocks - availaBlock) * blocSize);
String availableSize = Formatter.formatFileSize(context, availaBlock * blocSize);
return
usedSize +
" / "
+ availableSize;
// 空间:已使用/可用的;
}
|
3,USB外接输入设备(如:键盘,鼠标,扫描枪)
try
{
//获得外接USB输入设备的信息
Process p=Runtime.getRuntime().exec(
"cat /proc/bus/input/devices"
);
BufferedReader
in
=
new
BufferedReader(
new
InputStreamReader(p.getInputStream()));
String line =
null
;
while
((line =
in
.readLine())!=
null
){
String deviceInfo = line.trim();
//对获取的每行的设备信息进行过滤,获得自己想要的。
}
}
catch
(Exception e) {
e.printStackTrace();
}
|
另:设备信息也可以通过 adb shell 进入执行 cat /proc/bus/input/devices看到。
USB外接输入设备信息含义如下:
I: Bus=0019 Vendor=0002 Product=0001 Version=0100 //在Android设备与USB设备数据交互的是否使用到。
N: Name="vmouse" //外接的USB设备的名称。
H: Handlers=sysrq kbd event4 //输入设备监听事件
P: Phys=vmouse/input0
S: Sysfs=/devices/virtual/input/input0
这两行可用于识别该USB设备连接在Android设备的哪一个USB口.
4,监听USB外接输入设备输入内容
1.)对键盘输入进行监听 getevent /dev/input/event4(指定的event)
监听到的内容都是16进制的,具体数值的对应键盘按键还没有查到。
2.)对鼠标输入进行监听 cat /dev/input/mouse1(指定的mouse)
至于乱码的话我也不知道为什么