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

编程知识 更新时间:2023-05-02 17:43:35

项目需要,每次插入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功能,刚好是下周要做的功能,开心!!!

更多推荐

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

本文发布于:2023-04-27 17:31:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/487ccf2db874d5210f413c8dbfe35740.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:移除   android   USB

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 107284文章数
  • 27074阅读数
  • 0评论数