Android使用代码安全移除U盘或外置储存设备

本文介绍了如何在Android设备上通过代码实现安全移除U盘,避免文件损坏。首先提供了一个简单的跳转到设置界面的解决方案,然后详细阐述了使用StorageManager类结合反射机制来移除U盘的方法,包括获取VolumeInfo、检查是否已挂载读取、判断类型和执行卸载操作。这种方法避免了直接拔除U盘导致文件变为0b的问题。
摘要由CSDN通过智能技术生成

使用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();
}

参考来自:android 格式化USB 和移除USB(U盘)

原文:Android使用代码安全移除U盘或外置储存设备

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值