android格式化SD卡,获取其它程序的缓存大小,清理数据

本文介绍了如何利用Android的StorageManager类进行SD卡格式化以及获取和清理其他应用程序的缓存数据。通过反射调用隐藏方法,实现了对特定应用的缓存和数据大小的获取及清理功能。

找了很久,发现了StorageManager这个关键的类。

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

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

在StorageManager中我找到了几个关键方法

在这里插入图片描述
这几个方法没有任何说明,并且是hide标签,意味着得用反射。还有参数volid我一度不知道是啥玩意儿。

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

最后附上格式化SD卡代码,注意 格式完SD卡后,需要挂载SD后才能正常使用。

/**
	 * 格式化SD卡
	 * @param mContext
	 * @return 格式化sd卡是否成功
	 */
	public static Boolean getStoragePath(Context mContext) {
   
   
		Boolean isSuccess = false;
		StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE);
		Class<?> storageVolumeClazz = null;
		try {
   
   
			storageVolumeClazz = Class.forName("android.os.storage.StorageVolume");
			Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList");
			//拿到format方法格式化
			Method format = mStorageManager.getClass().getMethod("format", String.class);
			//挂载方法
			Method mount = mStorageManager.getClass().getMethod("mount", String.class);
			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);
				if (removable && path.equals(getSDcardDir(mContext)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值