Android 获取app应用大小、手机内存信息、删除文件方法、获得文件大小

原创 2016年08月30日 17:52:25

因为最近在做清理缓存的功能所以需要用到这些方法,下面就直接贴出代码了。

获取手机信息:

	/**
	 * 获取手机内部剩余存储空间
	 *
	 * @return
	 */
	public static long getAvailableInternalMemorySize() {
		File path = Environment.getDataDirectory();
		StatFs stat = new StatFs(path.getPath());
		long blockSize = stat.getBlockSize();
		long availableBlocks = stat.getAvailableBlocks();
		return availableBlocks * blockSize;
	}

	/**
	 * 获取手机内部总的存储空间
	 *
	 * @return
	 */
	public static long getTotalInternalMemorySize() {
		File path = Environment.getDataDirectory();
		StatFs stat = new StatFs(path.getPath());
		long blockSize = stat.getBlockSize();
		long totalBlocks = stat.getBlockCount();
		return totalBlocks * blockSize;
	}
删除文件和读取文件大小

小技巧:

可以通过这个方法直接获得kb、MB、GB。系统会自动转化

Formatter.formatFileSize(context, size)


	/**
	 * 删除指定文件夹下的所有文件
	 * @param file
	 */
	public static void deleteFile(File file){
		if (file.isFile()) {
			file.delete();
			return;
		}
		if (file.isDirectory()) {
			File[] childFile = file.listFiles();
			if (childFile == null || childFile.length == 0) {
				file.delete();
				return;
			}
			for (File f : childFile) {
				deleteFile(f);
			}
			file.delete();
		}
//		if(file.exists()){
////			file.delete();
//			Log.i("s","sss");
//		}
	}

	/**
	 * 获得文件大小
	 * @param file
	 * @return
	 * @throws Exception
	 */
	public static long getFolderSize(File file) throws Exception {
		long size = 0;
		try {
			File[] fileList = file.listFiles();
			for (int i = 0; i < fileList.length; i++) {
				// 如果下面还有文件
				if (fileList[i].isDirectory()) {
					size = size + getFolderSize(fileList[i]);
				} else {
					size = size + fileList[i].length();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return size;
	}

获取App所占大小稍微复杂一点:


目录结构为上图:

1、创建包:android.content.pm

2、创建两个AIDL文件IPackageStatsObserver.aidl 、PackageStats.aidl

IPackageStatsObserver.aidl

package android.content.pm;

import android.content.pm.PackageStats;

oneway interface IPackageStatsObserver {

    void onGetStatsCompleted(in PackageStats pStats, boolean succeeded);
}
PackageStats.aidl
package android.content.pm;

parcelable PackageStats;

添加权限:

<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>

获得AppSize的方法为:

	/**
	 * 获得App应用的大小
	 * @param context
	 * @param pkgName
	 * @throws NoSuchMethodException
	 * @throws InvocationTargetException
	 * @throws IllegalAccessException
	 */
	public static void getPkgSize(final Context context, String pkgName) throws NoSuchMethodException,
			InvocationTargetException, IllegalAccessException {
		// getPackageSizeInfo是PackageManager中的一个private方法,所以需要通过反射的机制来调用
		Method method = PackageManager.class.getMethod("getPackageSizeInfo",
				String.class, IPackageStatsObserver.class);
		// 调用 getPackageSizeInfo 方法,需要两个参数:1、需要检测的应用包名;2、回调
		method.invoke(context.getPackageManager(), pkgName,
				new IPackageStatsObserver.Stub() {
					@Override
					public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {
						// 子线程中默认无法处理消息循环,自然也就不能显示Toast,所以需要手动Looper一下
						Looper.prepare();
						// 从pStats中提取各个所需数据
						Toast.makeText(context, "缓存大小=" + Formatter.formatFileSize(context, pStats.cacheSize) +
										"\n数据大小=" + Formatter.formatFileSize(context, pStats.dataSize) +
										"\n程序大小=" + Formatter.formatFileSize(context, pStats.codeSize),
								Toast.LENGTH_LONG).show();
						// 遍历一次消息队列,弹出Toast
						Looper.loop();
					}
				});
	}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android中获取应用程序(包)的大小和缓存大小

关于安装包得大小信息封装在PackageStats类中,该类很简单,只有几个字段:                 PackageStats类:                  常用字段...
  • u014482758
  • u014482758
  • 2015年02月12日 11:35
  • 1432

Android获取应用占用空间

最近项目中需要获取手机中各个应用的占用的空间,但是百度上的提供的各种方法均不能获取到应用大小,可能由于版本迭代部分方法不能使用,经过改正后,此方法可以正确获取应用大小。获取应用的大小需要对Java反射...
  • m6711154
  • m6711154
  • 2016年07月22日 23:06
  • 672

Android获取文件夹及文件大小整合成的帮助类

http://blog.csdn.net/nmgchfzhzhg/article/details/8664555
  • u012587637
  • u012587637
  • 2014年10月11日 17:59
  • 1006

关于通过uri获取文件的大小

这个问题是在写手机 短信功能 通过短信来分享联系人的时候遇见的。 过程是在联系人中选择多个联系人,然后生成一个Vcard。将这个Vcard通过彩信来发送给别人。 短信中的处理是得到...
  • D_Android
  • D_Android
  • 2013年12月23日 10:39
  • 2054

Windows开发--获取文件大小及获取文件夹大小的方法

获取文件大小 Windows提供了好几个API函数来获取文件大小,还可以使用标准C和标准C++库函数来获取(当然了,标准库函数的底层实现也是调用了Windows API函数,效率上可能有所影响)。 ...
  • nicai888
  • nicai888
  • 2017年07月26日 10:54
  • 316

Android开发——获取应用数据/缓存大小并清理缓存

1. 获取应用数据/缓存大小 其中pm为实例化的PackageManager,因为需要遍历所有的已安装的应用。因此需要开启子线程进行处理。 还有需要注意的是,在Android4.2之前getPac...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年07月17日 16:08
  • 12035

android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位

android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位 public class FileSizeUtil { public static final in...
  • u011140027
  • u011140027
  • 2013年10月30日 10:42
  • 19858

android获取指定文件大小

android获取指定文件或者文件夹大小
  • xiaoyi848699
  • xiaoyi848699
  • 2015年04月09日 09:36
  • 7781

关于获取Android系统所有已安装App信息的一些操作(详细)

转载请注明出处:http://blog.csdn.net/qinjuning                 本节内容是如何获取Android系统中应用程序的信息,主要包括packagen...
  • RuingMan
  • RuingMan
  • 2016年05月08日 20:58
  • 12102

Android获取手机信息和APP信息大全

应用信息:包名、版本号、版本名,手机是否有Root权限 手机信息:手机屏幕宽和高、当前可用内存大小、总内存大小、IMEI号、IESI号、手机型号、手机品牌、手机MacAdd、CPU型号、CPU频率 ...
  • u012721519
  • u012721519
  • 2016年03月28日 20:42
  • 1655
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 获取app应用大小、手机内存信息、删除文件方法、获得文件大小
举报原因:
原因补充:

(最多只允许输入30个字)