[英]Get Cache Directory for all installed apps in android
我想获取Android安装的应用程序的缓存目录的确切大小。 我已经试过了。
List<ApplicationInfo> listOfApps = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for(ApplicationInfo applicationInfo : listOfApps) {
try {
Context context = createPackageContext(applicationInfo.packageName,CONTEXT_IGNORE_SECURITY);
File file = context.getCacheDir();
if(file!=null){
String path = file.getAbsolutePath();
long dir = file.length();
Log.d("All_Package", applicationInfo.packageName + "\t\t" + MemoryFreedPredication.formatFileSize(String.valueOf(dir)) + " \t\t"+path);}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
格式化大小的方法是
public static String formatFileSize(String fileSize) {
String[] sizes = {"B", "KB", "MB", "GB"};
double len = Double.parseDouble(fileSize);
int order = 0;
if (len < 1024) {
return String.format("%s %s", 1, sizes[1]);
} else {
while (len >= 1024 && order + 1 < sizes.length) {
order++;
len = len / 1024;
}
}
len = Math.round(len * 100.0) / 100.0;
return String.format("%s %s", len, sizes[order]);
}
但是总是返回4Kb
我为此目的使用了艾德尔。
final PackageManager packageManager = getPackageManager();
final List<ApplicationInfo> applicationInfos = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for(final ApplicationInfo runningTaskInfo : applicationInfos){
try {
Context context = createPackageContext(runningTaskInfo.packageName,CONTEXT_IGNORE_SECURITY);
// PackageManager packageManager = context.getPackageManager();
Method getPackageSizeInfo = packageManager.getClass().getMethod(
"getPackageSizeInfo", String.class, IPackageStatsObserver.class);
getPackageSizeInfo.invoke(packageManager, runningTaskInfo.processName,
new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
//Log.d("App_Size123","\n"+runningTaskInfo.loadLabel(packageManager)+"\t"+formatFileSize(String.valueOf(pStats.codeSize)));
Log.d("App_Size123","\n"+runningTaskInfo.loadLabel(packageManager)+"\t"+formatFileSize(String.valueOf(pStats.dataSize)));
//Log.d("App_Size123","\n"+runningTaskInfo.loadLabel(packageManager)+"\t"+formatFileSize(String.valueOf(pStats.cacheSize)));
//Log.d("App_Size123","\n"+runningTaskInfo.loadLabel(packageManager)+"\t"+formatFileSize(String.valueOf(pStats.externalDataSize)+"\n"));
}
});
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
我创建了3个aidl文件,如下所示。
PackageStats.aidl
interface IPackageStatsObserver {
void onGetStatsCompleted(in PackageStats pStats, boolean succeeded);
}
IPackageDataObserver.aidl
interface IPackageDataObserver {
void onRemoveCompleted(in String packageName, boolean succeeded);
}
PackageStats.aidl
parcelable PackageStats;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.