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

来源:互联网 发布:php csrf漏洞 编辑:程序博客网 时间:2024/05/28 22:13
package com.agj.test;import java.io.File;import java.lang.reflect.Method;import android.content.Context;import android.content.pm.IPackageDataObserver;import android.content.pm.PackageManager;import android.os.Environment;import android.os.RemoteException;import android.os.StatFs;/** * 1.功能相当于,点击了 应用程序信息 里面的 清楚缓存按钮,而非 清除数据 *  * 2.功能相当于,删除了/data/data/packageName/cache 文件夹里面所有的东西 *  * 3.需要权限 <uses-permission android:name="android.permission.CLEAR_APP_CACHE" /> */public class CacheClearHelper {public static void clearCache(Context context) {try {PackageManager packageManager = context.getPackageManager();Method localMethod = packageManager.getClass().getMethod("freeStorageAndNotify", Long.TYPE,IPackageDataObserver.class);Long localLong = Long.valueOf(getEnvironmentSize() - 1L);Object[] arrayOfObject = new Object[2];arrayOfObject[0] = localLong;localMethod.invoke(packageManager, localLong, new IPackageDataObserver.Stub() {@Overridepublic void onRemoveCompleted(String packageName, boolean succeeded) throws RemoteException {}});} catch (Exception e) {e.printStackTrace();}}private static long getEnvironmentSize() {File localFile = Environment.getDataDirectory();long l1;if (localFile == null)l1 = 0L;while (true) {String str = localFile.getPath();StatFs localStatFs = new StatFs(str);long l2 = localStatFs.getBlockSize();l1 = localStatFs.getBlockCount() * l2;return l1;}}}

另外,IPackageDataObserver这个类找不到的话,那么就自己新建一个,建成如下的样子:



IPackageDataObserver.aidl的内容是:


/* 
 ** 
 ** Copyright 2007, The Android Open Source Project 
 ** 
 ** Licensed under the Apache License, Version 2.0 (the "License"); 
 ** you may not use this file except in compliance with the License. 
 ** You may obtain a copy of the License at 
 ** 
 **     http://www.apache.org/licenses/LICENSE-2.0 
 ** 
 ** Unless required by applicable law or agreed to in writing, software 
 ** distributed under the License is distributed on an "AS IS" BASIS, 
 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 ** See the License for the specific language governing permissions and 
 ** limitations under the License. 
 */ 
  
package android.content.pm; 
  
 /** 
  * API for package data change related callbacks from the Package Manager. 
  * Some usage scenarios include deletion of cache directory, generate 
  * statistics related to code, data, cache usage(TODO) 
  * {@hide} 
  */ 
 oneway interface IPackageDataObserver { 
     void onRemoveCompleted(in String packageName, boolean succeeded); 
 }


0 0
原创粉丝点击