無需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" /> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM