android 格式化USB 和移除USB(U盘)

项目需要,每次插入U盘需要格式化。

刚看到这个需求的时候感觉很简单,调一行api就搞定的,事实证明还是太年轻了

android没有提供相应的api,于是百度

参考 Android格式化外部设备如USB等_AZZ的博客-CSDN博客

按照一贯的风格,直接CV大法,兴高采烈的发现行不通,有些类在android高版本都没了,这篇博客是基于android5.0,这会儿在我这用不成。

后来翻了很久,发现了StorageManager这个关键的类。

这个类在/frameworks/base/core/java/android/os/storage/StorageManager.java下,

StorageManager是Android SDK中管理存储设备的一个类。其中的存储设备分内部存储和外部存储,外部存储可以有SDCard、U盘等其他挂载的外设。

还有StorageVolume类
StorageVolume代表的是一个设备信息的数据结构,里面包含了名称、路径、挂载状态等等信息。

StorageManager中我找到了两个方法

移除U盘:

 格式化U盘:

 这两个方法没有任何说明,并且是hide标签,意味着得用反射。还有参数volid我一度不知道是啥玩意儿。

尝试以后,通过传入StorageVolume.getid(usb的id),成功

下面附上代码:

   // 获取 StorageVolume 对象
    public void getStoragePath(Context mContext) {
        mStorageManager = (StorageManager) 
        mContext.getSystemService(Context.STORAGE_SERVICE);
        Class<?> storageVolumeClazz = null;
        try {
            storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
            //暂且称之为获取usb列表
            Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
            //拿到format方法
            Method format = mStorageManager.getClass().getMethod("format", String.class);
            //拿到StorageVolume 的getpath方法
            Method getPath = storageVolumeClazz.getMethod("getPath");
             //拿到StorageVolume 的getId方法
            Method getId = storageVolumeClazz.getMethod("getId");
            Method isRemovable = storageVolumeClazz.getMethod("isRemovable");
            Object result = getVolumeList.invoke(mStorageManager);
            final int length = Array.getLength(result);
            //遍历列表
            for (int i = 0; i < length; i++) {
                Object storageVolumeElement = Array.get(result, i);
                String path = (String) getPath.invoke(storageVolumeElement);
                boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement);
                //如果当前的usb地址和我们定义的地址一样的话,就操作它
                if (removable && path.equals(mPreferUsbPath)) {
                    String id = (String) getId.invoke(storageVolumeElement);
                    //格式化它!!
                    format.invoke(mStorageManager, id);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

以上,格式化USB算是完成了。

顺便还解决了移除USB功能,刚好是下周要做的功能,开心!!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值