无需root,清除清理安卓,android应用的缓存

android系统设置->应用详情里面有个清除缓存,那我们是否可以参照setting源码来实现同样的功能,查看源码发现实现如下:

  mPm.deleteApplicationCacheFiles(packageName, mClearCacheObserver);

mpm->PackageManager

packageName->应用包名

mClearCacheObserver->IPackageStatsObserver.aidl 我们找到该aidl导入到我们的包中

因为deleteApplicationCacheFiles为隐藏方法,无法直接调用,只能用反射

代码如下:

 1 public void clean(View v){
 2 
 3 Method method = PackageManager.class.getMethod("deleteApplicationCacheFiles",String.class,IPackageDataObserver.class);
 4 method.invoke(pm, "cn.chai.mobilesafe",ipdo);
 5 
 6 }
 7 
 8 IPackageDataObserver.Stub ipdo = new IPackageDataObserver.Stub() {
 9 
10 @Override
11 public void onRemoveCompleted(String packageName, boolean succeeded)
12 throws RemoteException {
13 System.out.println(packageName);
14 System.out.println(succeeded);
15 
16 }
17 };

运行查看log发现需要android:name="android.permission.DELETE_CACHE_FILES"

配置文件加上权限发现该权限只能系统应用用,悲催,看来这个方式实现失败。

后来查找还有另一种方式实现清除缓存,不过该种方式只能清除所有应用的缓存,不能单个清除方法如下:

1 PackageManager packageManager = context.getPackageManager();  
2             Method localMethod = packageManager.getClass().getMethod("freeStorageAndNotify", Long.TYPE,  
3                     IPackageDataObserver.class);  
4 localMethod.invoke(packageManager, localLong, new IPackageDataObserver.Stub() {  
5   
6                 @Override  
7                 public void onRemoveCompleted(String packageName, boolean succeeded) throws RemoteException {  
8                 }  
9             });  

对了,别忘了加上另一个权限<uses-permission android:name="android.permission.CLEAR_APP_CACHE" /> 

 

转载于:https://www.cnblogs.com/cimu/p/4077460.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值