判断Android tv U盘挂载不同于判断手机是否连接usb,我们没办法直接使用usbDevice类进行操作。
只能通过判断action动作,在android中,插入U盘的时候,kernal内核会向上发出action动作,让应用层来获取。
在代码中添加以下代码段,来监听U盘挂载:
intentFilter.addAction(Intent.ACTION_USB_DISK_MOUNTED);
intentFilter.addAction(Intent.ACTION_USB_DISK_UNMOUNTED);
intentFilter.addAction(Intent.ACTION_USB_DISK_UNMOUNTED);
intentFilter.addDataScheme("file");
this.registerReceiver(usbReceiver, intentFilter);
注意:intentFilter.addDataScheme(“file”)–》是必须添加的,不然没办法监听action动作。
添加完成之后,就可以使用广播来进行动作监听事件触发:
private BroadcastReceiver usbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
List<StorageItemEntity> infos = UsbDeviceManager.getAvaliableStorage(UsbDeviceManager.listAllStorage(arg0));
if (infos != null) {
if (arg1.getAction().equals(Intent.ACTION_USB_DISK_MOUNTED)) {
infos = UsbDeviceManager.getAvaliableStorage(UsbDeviceManager.listAllStorage(arg0));
for(StorageItemEntity sie:infos){
Log.i("LWL",sie.toString());
}
} else if (arg1.getAction().equals(Intent.ACTION_USB_DISK_UNMOUNTED)) {
Log.v(TAG, "ACTION_USB_DISK_UNMOUNTED::::" + arg1.getAction());
List<StorageItemEntity> aliveUsb = UsbDeviceManager.getAvaliableStorage(UsbDeviceManager.listAllStorage(arg0));
for(StorageItemEntity sie:aliveUsb){
Log.i("LWL",sie.toString());
}
}
}
}
};
StorageItemEntity类是用来存放所有挂载的U盘的信息:
/**
* @author 李文烙
*
*/
public class StorageItemEntity {
//存储器的地址
private String uri;
//存储器的类型
private int type = 0;
//U盘的名字
private String manufactorName = null;
//存储器的状态
private String state;
//是否可以移除
private boolean isRemoveable;
public StorageItemEntity(){
}
public StorageItemEntity(String path){
this.uri=path;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getManufactorName() {
return manufactorName;
}
public void setManufactorName(String manufactorName) {
this.manufactorName = manufactorName;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}