最近在做appStore时,涉及到一个第三方app下载视频后将车机存储撑爆的问题,从而影响到我们车机自带的app使用,问题很是严重,于是就需要提供缓存清理以及垃圾清理的功能,当用户使用第三方app时,存储空间达到一定量的时候会提示用户去清理,否则不允许使用第三方app。
缓存获取
获取各个应用程序的缓存大小,可以通过使用PackageManager.getPackageSizeInfo方法来获取,但是它被隐藏了,所以我们只能通过反射来调用该方法
一、首先我们需要获取到系统中所有已安装app的基本信息
List<PackageInfo> installedPackages = mPackageManager.getInstalledPackages(0);
for (PackageInfo packageInfo : installedPackages) {
getCacheSize(packageInfo);//反射调用getPackageSizeInfo
}
二、反射调用getPackageSizeInfo
/**
* 获取到缓存的大小
*
* @param packageInfo
*/
private void getCacheSize(PackageInfo packageInfo) {
try {
//通过反射获取到当前的方法
Method method = PackageManager.class.getDeclaredMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);
/**
* 第一个参数表示当前的这个方法由谁调用的
* 第二个参数表示包名
*/
method.invoke(mPackageManager, packageInfo.applicationInfo.packageName, new MyIPackageStatsObserver(packageInfo));
} catch (Exception e) {
// TODO Auto-gener