android 格式化USB 和移除USB(U盘) |
您所在的位置:网站首页 › u盘手机上格式化 › 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功能,刚好是下周要做的功能,开心!!! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |