手机缓存清理
需要三个aidl文件:
http://download.youkuaiyun.com/detail/chengtaoyan/9171235
代码:(Activity)
private Method getPackageSizeInfo;
public void getAppCache() throws InterruptedException {
final PackageManager pm = getActivity().getPackageManager();
try {
getPackageSizeInfo = PackageManager.class.getDeclaredMethod(
"getPackageSizeInfo", String.class,
IPackageStatsObserver.class);
getPackageSizeInfo.setAccessible(true);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
List<PackageInfo> packageInfos = pm
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
final List<RunningProcess> itemList = new ArrayList<RunningProcess>();
final CountDownLatch countDownLatch = new CountDownLatch(
packageInfos.size());
try {
for (PackageInfo info : packageInfos) {
final PackageInfo packageInfo = info;
getPackageSizeInfo.invoke(pm, info.packageName,
new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(
PackageStats pStats, boolean succeeded)
throws RemoteException {
if (succeeded && pStats != null) {
RunningProcess item = new RunningProcess();
item.setMemorySize(pStats.cacheSize);
item.setAppName(packageInfo.applicationInfo
.loadLabel(pm).toString());
item.setIcon(packageInfo.applicationInfo.loadIcon(pm));
itemList.add(item);
}
synchronized (countDownLatch) {
countDownLatch.countDown();
}
}
});
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
countDownLatch.await();
//将数据显示在列表上
list.addAll(itemList);
adapter.notifyDataSetChanged();
}
/**
* 一键清理
*/
private Method freeStorageAndNotify;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public void doClean() {
try {
freeStorageAndNotify = PackageManager.class.getDeclaredMethod(
"freeStorageAndNotify", Long.TYPE,
IPackageDataObserver.class);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
PackageManager pm = getActivity().getPackageManager();
File loadData = Environment.getDataDirectory();
if (loadData == null) {
return;
}
StatFs statFs = new StatFs(loadData.getAbsolutePath());
// long size = statFs.getBlockCount()*statFs.getBlockSize();
long size = statFs.getBlockCountLong() * statFs.getBlockSizeLong();
try {
freeStorageAndNotify.invoke(pm, size,
new IPackageDataObserver.Stub() {
@Override
public void onRemoveCompleted(String packageName,
boolean succeeded) throws RemoteException {
Toast.makeText(getActivity(), "清理成功", Toast.LENGTH_LONG).show();
}
});
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
Ok