/**
* 获取应用程序缓存的工具类
*
*
*/
public class CacheUtil {
/**
* 根据包名获取某个应用的CacheInfo,这里涉及到了AIDL
* 需要权限:android.permisson.GET_PACKAGE_SIZE
*
* @param context
* @param pkgName
* @return
*/
public static CacheInfo getCacheInfoByPkgName(Context context,
String pkgName) {
try {
final CacheInfo cacheInfo=new CacheInfo();
PackageManager pm = context.getPackageManager();
//getPackageSizeInfo这个方法是PackageManager私有的,只能通过反射调用
Method method = PackageManager.class.getMethod("getPackageSizeInfo", new Class[]{String.class,IPackageStatsObserver.class});
method.invoke(pm, new Object[] { pkgName,new IPackageStatsObserver.Stub() {
public void onGetStatsCompleted(PackageStats pStats,boolean succeeded) throws RemoteException {
long cacheSize = pStats.cacheSize;
long codeSize = pStats.codeSize;
long dataSize = pStats.dataSize;
cacheInfo.setCacheSize(cacheSize);
cacheInfo.setCodeSize(codeSize);
cacheInfo.setDataSize(dataSize);
}
} });
return cacheInfo;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 调用系统Setting方法,根据包名清理某个应用的缓存
* @param context
* @param pkgName
*/
public static void clearCacheByPkgName(Context context,String pkgName){
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addCategory("android.intent.category.VOICE_LAUNCH");
intent.putExtra("pkg", pkgName);
context.startActivity(intent);
}
}
public class CacheInfo {
private long codeSize;// 应用大小
private long cacheSize;// 缓存大小
private long dataSize;// 数据大小
public long getCodeSize() {
return codeSize;
}
public void setCodeSize(long codeSize) {
this.codeSize = codeSize;
}
public long getCacheSize() {
return cacheSize;
}
public void setCacheSize(long cacheSize) {
this.cacheSize = cacheSize;
}
public long getDataSize() {
return dataSize;
}
public void setDataSize(long dataSize) {
this.dataSize = dataSize;
}
}
需要的.aidl文件,下载地址:
http://download.csdn.net/detail/liu537192/7990035