(原)android4.2以后获取应用程序和缓存大小的方法(源码有改变)

以前获取应用的大小是用

PackageManager mPackageManager= getPackageManager();

try {Method getPackageSizeInfoMethod = PackageManager.class.getDeclaredMethod("getPackageSizeInfo", String.class,
              IPackageStatsObserver.class);
getPackageSizeInfoMethod.invoke(mPackageManager, packageInfo.packageName,new MyObserver());
} catch (Exception e) {
}
class MyObserver extends IPackageStatsObserver.Stub {  

    @Override
    public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
            throws RemoteException {
        long cacheSize = pStats.cacheSize;
        String packageName = pStats.packageName;
        String formatFileSize = Formatter.formatFileSize(
                getApplicationContext(), cacheSize);
        System.out.println(packageName + ":" + formatFileSize);
    }
}

但在4.2后 PackageManager.getPackageSizeInfo(String packageName, IPackageStatsObserver observer)不可用,

改为PackageManager.getPackageSizeInfo(String packageName, int userHandle, IPackageStatsObserver observer),

至于增加的参数userHandle的解释是:The user whose size information should be retrieved。

这个userHandle怎么来? 通过系统类的UserHandle.myUserId()获取;

Method myUserId = UserHandle.class.getDeclaredMethod("myUserId");
int userID = (Integer) myUserId.invoke(mPackageManager,null);

获取了以后就可以使用新的getPackageSizeInfo函数了。

getPackageSizeInfoMethod.invoke(mPackageManager,packageInfo.packageName, userID, new MyObserver()
);
时间: 2024-11-09 02:09:29

(原)android4.2以后获取应用程序和缓存大小的方法(源码有改变)的相关文章

为什么C/C++程序员都要阅读Redis源码之:Redis学习事件驱动设计

为什么我说C/C++程序员都要阅读Redis源码 主要原因就是『简洁』.如果你用源码编译过Redis,你会发现十分轻快,一步到位.其他语言的开发者可能不会了解这种痛,作为C/C++程序员,如果你源码编译安装过Nginx/Grpc/Thrift/Boost等开源产品,你会发现有很多依赖,而依赖本身又有依赖,十分痛苦.通常半天一天就耗进去了.由衷地羡慕 npm/maven/pip/composer/...这些包管理器.而Redis则给人惊喜,一行make了此残生. 除了安装过程简洁,代码也十分简洁.

ASP.NET程序读取二代身份证(附源码)

原文:ASP.NET程序读取二代身份证(附源码) 一般来说winform应用程序解决这个问题起来时很容易的,web应用程序就麻烦一点了. 这里我说说我的解决思路: 一.你必要有联机型居民身份证阅读器一个(带驱动光盘),这里我用的是精伦电子公司的iDR200,并有这个阅读器的开发接口说明. 二.新建一个winform控件项目ReadCardControl,添加一个主类ReadCard 1.  声明dll入口 [DllImport("Sdtapi.dll")] private static

Android实现获取应用程序相关信息列表的方法

本文所述为Androdi获取手机应用列表的方法,比如获取到Android应用的软件属性.大小和应用程序路径.应用名称等,获取所有已安装的Android应用列表,包括那些卸载了的,但没有清除数据的应用程序,同时在获取到应用信息的时候,判断是不是系统的应用程序,这是一个应用管理器所必需具备的功能. 具体实现代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33

Android中获取应用程序(包)的大小-----PackageManager的使用(二)

通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识. 本部分的内容是如何获取安装包得大小,包括缓存大小(cachesize).数据大小(datasize).应用程序大小(codesize). 本部分的知识点涉及到AIDL.Java反射机制.理解起来也不是很难. 关于安装包得大小信息封装在Packag

微信小程序 跳一跳 外挂 C# winform源码

昨天微信更新了,出现了一个小游戏"跳一跳",玩了一下 赶紧还蛮有意思的 但纯粹是拼手感的,玩了好久,终于搞了个135分拿了个第一名,没想到过一会就被朋友刷下去了,最高的也就200来分把,于是就想着要是开发个辅助就好了,于是简单想了一下最高游戏 先来说下这个游戏的界面和规则: 先看看界面 规则:按住屏幕 按一定时间松开就可以跳跃,跳跃到前方的图案中得1分,图按中间得2分(连续多个中间累加2分,比如第一个2分 第二个4分 第三个6分 最高累计32分) 其它规则不说明了 整理了下实现原理,其

Java程序员腾讯分分彩源码出售的5年职业规划

第1部分 在搭建SSM的腾讯分分彩源码出售(www.1159880099.com)QQ1159880099 过程中,可能会经常接触到一个叫maven的工具.这个工具也是你以后工作当中几乎是必须要使用的工具,所以你在搭建SSM的过程中,也可以顺便了解一下maven的知识.在你目前这个阶段,你只需要在网络上了解一下maven基本的使用方法即可,一些高端的用法随着你工作经验的增加,会逐渐接触到的. 第2部分: 对于参加工作一年以内的同学.恭喜你,这个时候,你已经拥有了一份Java的工作.这个阶段是你成

工作5年的Java程序员,才学会阅读源码,可悲吗?

最近一位5年开发经验的群友与我聊天 他说:最近慢慢的尝试去看spring的源码,学习spring,以前都只是会用就行了,但是越是到后面,发现只懂怎么用还不够,在面试的时候经常被问到一些开源框架的源码问题,即使在网上各种百度,当时回答出来也会是很皮毛,不痛不痒的解答. 对于目前碰到的瓶颈,他不知道怎么办. 我相信,绝不仅仅只有他一个人遇到这样的瓶颈,中国上百万的Java程序员中,大部分Java程序员都卡在这个苦恼中,或者还有更多的程序员们不知道自己不知道,因为他们看不到冰山下是什么. 回到为什么工

巧妙地利用进程分离来设置程序开机自动启动!(附源码)

在GG(高仿QQ)最早的版本中,我就加入了开机自动启动的功能,是通过操作注册表来实现的,但是操作注册表需要管理员权限,这样,就表示必须以管理员的身份来运行GG客户端.这对某些用户来说可能接受不了,因为以这么高的权限来运行一个程序,用户会觉得风险较大.而就从GG的角度来说,也只有在设置或取消开机启动才需要这个权限,而一开始就以管理员身份运行GG,就有点太夸张和浪费了. 一.方案进化 我开始想到的解决方案是,仍然以普通用户的身份启动GG,当需要操作注册表时,再提升至管理员权限.后来通过查资料了解到:

图片按日期分类和查看程序(WPF开发)(附源码)

手机方便了我们的生活,可以随时随地拍摄.越来越多的图片堆砌在电脑里.看到杂乱无章的图片,实在感到头痛.手动整理太复杂.基于此,我写了一个小程序,可以将图片按日期整理和查看.按日期查看图片,回忆过去的点点滴滴! 手机拍摄图片时,图片文件会存储拍摄时间,也就是exif信息.通过读取exif信息,可以知晓拍摄时间,程序就是根据该值排序的.查看文件的属性可以看到如下信息: 这个程序有两个功能:按日期整理图片,按日期查看图片. 1 按日期整理图片 功能选项:选择图片存放目录,整理后目录.分类依据:就是分类