96利用反射获取缓存和应用程序的大小信息
来源:互联网 发布:js中的addlistenevent 编辑:程序博客网 时间:2024/05/16 11:57
getCacheDir()方法得到缓存的位置。观察系统设置源码看下他的原理:
打开设置的源码:
得到:
继续:
得到:
继续:
得到:
继续:
点一下看到其是类的成员变量,ctrl+k:得到:
打开:发现字符串的值居然是:正在计算...这不是想要的,继续找:
最后我们看到了:
我们需要:
getPackageSizeInfo()但是查看源码:
/** * Retrieve the size information for a package. * Since this may take a little while, the result will * be posted back to the given observer. The calling context * should have the {@link android.Manifest.permission#GET_PACKAGE_SIZE} permission. * * @param packageName The name of the package whose size information is to be retrieved * @param userHandle The user whose size information should be retrieved. * @param observer An observer callback to get notified when the operation * is complete. * {@link android.content.pm.IPackageStatsObserver#onGetStatsCompleted(PackageStats, boolean)} * The observer's callback is invoked with a PackageStats object(containing the * code, data and cache sizes of the package) and a boolean value representing * the status of the operation. observer may be null to indicate that * no callback is desired. * * @hide */ public abstract void getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer);
发现他是隐藏的。
最终实现的代码如下:
package com.ustc.mobilemanager;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.List;import android.app.Activity;import android.content.pm.IPackageStatsObserver;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.PackageStats;import android.os.Bundle;import android.os.RemoteException;import android.text.format.Formatter;import android.view.Window;import android.widget.ProgressBar;import android.widget.TextView;public class CleanCacheActivity extends Activity {private ProgressBar progressBar1;private TextView tv_scan_status;private PackageManager pm;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_clean_cache);tv_scan_status = (TextView) findViewById(R.id.tv_scan_status);progressBar1 = (ProgressBar) findViewById(R.id.progressBar1);scanCache();}/** * * 扫描手机里面所有应用程序的缓存信息 * */private void scanCache() {pm = getPackageManager();new Thread(new Runnable() {@Overridepublic void run() {Method getPackageSizeInfo = null;Method[] methods = PackageManager.class.getMethods();for (Method method : methods) {System.out.println(method.getName());if ("getPackageSizeInfo".equals(method.getName())) {getPackageSizeInfo = method;}}List<PackageInfo> packInfos = pm.getInstalledPackages(0);for (PackageInfo packageInfo : packInfos) {//public abstract void getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer);try {getPackageSizeInfo.invoke(pm, packageInfo.packageName,new MyDataObserver());} catch (Exception e) {e.printStackTrace();}}}}).start();}private class MyDataObserver extends IPackageStatsObserver.Stub{@Overridepublic void onGetStatsCompleted(PackageStats pStats, boolean succeeded)throws RemoteException {long cache = pStats.cacheSize;long code = pStats.codeSize; long data = pStats.dataSize; System.out.println("cache:" + Formatter.formatFileSize(getApplicationContext(), cache)); System.out.println("code:" + Formatter.formatFileSize(getApplicationContext(), code)); System.out.println("data:" + Formatter.formatFileSize(getApplicationContext(), data)); String packname = pStats.packageName; System.out.println(packname); System.out.println("------------------");}}}
运行需要下面的权限:
2015了,新年快乐!继续加油。
0 0
- 96利用反射获取缓存和应用程序的大小信息
- 109_利用反射调用隐藏api获取应用程序的缓存大小
- 利用反射获得程序的缓存大小、应用程序大小、数据大小,利用反射清除缓存,全部清理
- android获取应用程序大小,缓存数据信息
- 通过反射和AIDI获取应用程序大小
- android 调用系统方法获取应用程序信息 如缓存大小
- 获取应用程序缓存信息
- 根据包名利用反射获取缓存信息
- 获取缓存的大小和清除缓存
- c#反射机制学习和利用反射获取类型信息
- iOS 获取应用程序缓存大小
- iOS 获取应用程序缓存大小
- 98利用反射清理应用程序的缓存以及清理所有应用程序的缓存
- ANDROID学习 获取应用程序的缓存等信息
- Android应用数据、缓存的清除和获取缓存大小
- 利用反射获取子类,父类,接口的信息
- 利用反射获取Camera支持尺寸大小
- android 获取其他应用程序的缓存大小以及清理应用缓存
- Java学习笔记(一)网格袋布局
- Java学习笔记(二)事件监听器
- Java学习笔记(三)Java2D组件
- FPGA学习笔记(一)Verilog语法基础
- FPGA学习笔记(二)模块建立及变量连接
- 96利用反射获取缓存和应用程序的大小信息
- 待飞日记(第八天和第九天)
- 告别2014
- Oracle数据库之同义词(SYNONYM)使用
- 复习之增删改查
- java发送http请求
- 教育经济主义对社会钢琴教育人文价值的影响
- 软件构建中的设计
- 2014 跌跌撞撞