运用反射格式化SD卡

前些日子要求做格式化SD卡,没办法找了很多都不行,后来找到一个大概的,但是忘记了是哪,所以忘记出处在哪了
这里我的SD卡的路径是因为内部做了swap,交换了内置SD卡 和外置SD卡的路径,所以我写死了
格式化SD卡(运用反射调用隐藏方法)
public int formatSDCard() {
try {
int count=0;
Method getService = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
Object service = getService.invoke(null, "mount");
Class Stub = Class.forName("android.os.storage.IMountService$Stub");
Method asInterface = Stub.getMethod("asInterface", Class.forName("android.os.IBinder"));
Object mountServ = asInterface.invoke(null, service);
//卸载SD卡
Method unmountVolume = mountServ.getClass().getMethod("unmountVolume", String.class, boolean.class, boolean.class);
unmountVolume.invoke(mountServ, "/storage/sdcard0", true, true);
while (Environment.isExternalStorageRemovable()&&count<30) {
Log.i("TAG", "SD卡还未被完全卸载");
SystemClock.sleep(1000);
count++;
}
//格式化SD卡,返回结果为0则成功,否则失败
Method formatVolume = mountServ.getClass().getMethod("formatVolume", String.class);
Object ob = formatVolume.invoke(mountServ, "/storage/sdcard1");
Log.i("Tag", " m格式化结果 = " + ob);
SystemClock.sleep(2000);
if (ob != null && (Integer)ob == 0) {
Method mountVolume = mountServ.getClass().getMethod("mountVolume", String.class);
Object om = mountVolume.invoke(mountServ, "/storage/sdcard1");
Log.i("Tag", "m挂载结果SD卡= " + om);
if (om != null && (Integer)om == 0) {
return 0;
}
}
} catch (InvocationTargetException e) {
Log.i("TAG", "此处接收被调用方法内部未被捕获的异常");
Throwable t = e.getTargetException();// 获取目标异常
t.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return -1;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值