首页 > 代码库 > 无需root,清除清理安卓,android应用的缓存
无需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 @Override11 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" />
无需root,清除清理安卓,android应用的缓存
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。