使用U盘向手机拷贝文件之后如果立即拔掉U盘的话文件会变为0b的情况,需要正常的安全移除
最简单的就是直接跳到设置界面让用户再点击移除U盘,但考虑这不太友好,于是网上找了一下资料找到以下方法可进行移除
1、先上跳转到设置界面的代码,比较简单
Intent intent = new Intent(Settings.ACTION_MEMORY_CARD_SETTINGS); startActivity(intent);
2、使用StorageManager类进行移除,它是一个管理储存设备的类,里面还有很多方法可以使用,但有很多都是hide的方法,需要使用反射机制,以下图片是移除U盘和格式化U盘
下面的代码是移除,格式化调用format即可,该方法需要使用到U盘id
StorageManager mStorageManager = (StorageManager) context.getSystemService(Activity.STORAGE_SERVICE); Class<?> volumeInfoClazz = null; Method getVolumes = null; Method isMountedReadable = null; Method getType = null; List<?> volumes = null; try { volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo"); getVolumes = StorageManager.class.getMethod("getVolumes"); isMountedReadable = volumeInfoClazz.getMethod("isMountedReadable"); getType = volumeInfoClazz.getMethod("getType"); Method getId = volumeInfoClazz.getMethod("getId"); Method unmount = mStorageManager.getClass().getMethod("unmount", String.class); volumes = (List<?>) getVolumes.invoke(mStorageManager); if (volumes.size()==0){ return; } for (Object vol : volumes) { if (vol != null && (boolean) isMountedReadable.invoke(vol) && (int) getType.invoke(vol) == 0) { String id = (String)getId.invoke(vol); unmount.invoke(mStorageManager,id);//移除U盘 } } } catch (Exception ex) { ex.printStackTrace(); }