Android Tv U盘挂载

在Android TV上监听U盘挂载不同于手机,无法直接使用usbDevice类。当U盘插入时,内核会发出action。通过在代码中添加特定的intentFilter和广播监听,可以捕获挂载事件。同时,需要一个工具类来管理挂载的磁盘状态,由于getVolumeState方法被隐藏,需使用反射调用。本文涉及StorageManager和StorageVolume类的使用。
摘要由CSDN通过智能技术生成

判断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;
    }

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值