android獲取應用程序大小,緩存數據信息

詳細參考  http://download.csdn.net/detail/w6028819321/7456649


package com.xj.appinfo.activity;

import java.lang.reflect.Method;

import android.app.Activity;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.PackageManager;
import android.content.pm.PackageStats;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class MainActivity extends Activity {
	private TextView tv;
	private static final String ATTR_PACKAGE_STATS="PackageStats";
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		tv=new TextView(this);
		setContentView(tv);		
		getpkginfo("com.xj.notebook");
	}
	 private Handler mHandler = new Handler() {
			public void handleMessage(Message msg) {
				switch (msg.what) {
				case 1:
					String infoString="";
					PackageStats newPs = msg.getData().getParcelable(ATTR_PACKAGE_STATS);
					if (newPs!=null) {
						infoString+="應用程序大小: "+formatFileSize(newPs.codeSize);
						infoString+="\n數據大小: "+formatFileSize(newPs.dataSize);
						infoString+="\n緩存大小: "+formatFileSize(newPs.cacheSize);
					}
					tv.setText(infoString);
					break;
				default:
					break;
				}
			}
			};
	public void getpkginfo(String pkg){
		PackageManager pm = getPackageManager();
		try {
			Method getPackageSizeInfo = pm.getClass().getMethod("getPackageSizeInfo", String.class,IPackageStatsObserver.class);
			getPackageSizeInfo.invoke(pm, pkg,new PkgSizeObserver());
		} catch (Exception e) {
		}
	}
	class PkgSizeObserver extends IPackageStatsObserver.Stub {
        public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) {
             Message msg = mHandler.obtainMessage(1);
             Bundle data = new Bundle();
             data.putParcelable(ATTR_PACKAGE_STATS, pStats);
             msg.setData(data);
             mHandler.sendMessage(msg);
            
         }
     }
	
	/**
	 * 獲取文件大小
	 * 
	 * @param length
	 * @return
	 */
	public static String formatFileSize(long length) {
		String result = null;
		int sub_string = 0;
		if (length >= 1073741824) {
			sub_string = String.valueOf((float) length / 1073741824).indexOf(
					".");
			result = ((float) length / 1073741824 + "000").substring(0,
					sub_string + 3)
					+ "GB";
		} else if (length >= 1048576) {
			sub_string = String.valueOf((float) length / 1048576).indexOf(".");
			result = ((float) length / 1048576 + "000").substring(0,
					sub_string + 3)
					+ "MB";
		} else if (length >= 1024) {
			sub_string = String.valueOf((float) length / 1024).indexOf(".");
			result = ((float) length / 1024 + "000").substring(0,
					sub_string + 3)
					+ "KB";
		} else if (length < 1024)
			result = Long.toString(length) + "B";
		return result;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章