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 获取本地缓存文件大小,删除功能

博客地址:http://blog.csdn.net/wwj_748/article/details/42737607 前言 本篇博客要给大家分享的如何获取应用缓存的大小和清除缓存的功能,我们知道我...

【Java API】java获取文件大小的方法&java删除所有文件

很基础的一篇文章,获取一个目录下文件的大小 一开始看File类的方法file.getTotalSpace() //获取当前file所在分区的总大小,单位是字节 file.getUsableSpace(...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

centos7中根据文件大小排序以及jenkins配置每周删除一次jobs日志信息

环境操作系统:win7 虚拟机:centos7效果按照文件大小降序du * -sh | sort -hr #h 表示以人可读的形式显示出来按创建时间排序ls -alc # 按创建时间排序查看文件大小...

获取app文件大小 并对应响应单位:B KB MB GB; DecimalFormat

分享: 注:参考很多资料,最后理解的基础上自己整理编写,如有冒犯,敬请见谅!谢谢   第一步:计算文件大小并对应相应单位 /** * 文件大小计算 * @param fileSize * ...

QT之HTTP下载获取文件大小信息

记录点滴,只为分享!希望对你有帮助,因为我也是在别人的帮助中慢慢成长!

input file标签 获得添加文件大小的方法

1.火狐浏览器(或非IE) document.getElementById("input file ID").files[0].size; 此种方法不能兼容所有浏览器 2.IE浏览器(个人验证未...

获取文件大小的几种方法

关于这个问题, 我们有几种解决方案,其实前面我都写过这样的文章, 今天只是想总结一下: 方案1:GetFileSize, 这个函数最简单了, 看代码: #include windows.h...

获取文件大小的方法

在程序设计当中,我们可能要获得指定文件的大小。经过我在网上搜索,已经发现有三种方法可以获取文件的大小。 一、通过 CFile 类的成员函数 GetLength 获取文件大小; 二、通过 CFile...

Java中获取文件大小的正确方法

本文出处:http://blog.csdn.net/chaijunkun/article/details/22387305,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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