《笔记》Android 获取第三方应用及查看应用信息、apk大小、缓存、存储,以及第三方清除缓存

获取应用相关信息:

PS:manifest标签中设置以下属性表示系统应用
android:process="system" android:sharedUserId="android.uid.system"

//获取所有应用(非系统apk,有些应用获取不到)
List<ApplicationInfo> installedApplications = getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA);

获取缓存,apk体积,存储大小,版本号等:

    //全局变量,保存当前查询包得信息private long cachesize ; //缓存大小private long datasize  ;  //数据大小private long codesize  ;  //应用程序大小private long totalsize ; //总大小//获取相关数据public void  queryPacakgeSize() {getPackageSizeInfo(new PackageStatsObserver());}/** * 8.0及以下回调使用* */private class PackageStatsObserver extends IPackageStatsObserver.Stub {@Overridepublic void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {Log.d("hsh", "packageName = "+pStats.packageName+"---"+(pStats.cacheSize + pStats.externalCacheSize));// 在此处理 PackageStats 数据// TODO Auto-generated method stubcachesize = pStats.cacheSize  ; //缓存大小datasize = pStats.dataSize  ;  //数据大小codesize = pStats.codeSize  ;  //应用程序大小totalsize = cachesize + datasize + codesize ;
//            Log.i("hsh", "cachesize--->"+cachesize+" datasize---->"+datasize+ " codeSize---->"+codesize)  ;setViewData();}}/** * 获取apk体积,内存,缓存信息* */private void getPackageSizeInfo( IPackageStatsObserver.Stub observer) {Context context = SettingApplication.getInstance();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {final StorageStatsManager storageStatsManager = (StorageStatsManager) context.getSystemService(Context.STORAGE_STATS_SERVICE);final StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);try {StorageStats storageStats = storageStatsManager.queryStatsForPackage(applicationInfo.storageUuid,applicationInfo.packageName, UserHandle.getUserHandleForUid(applicationInfo.uid));
//                StorageStats storageStats = storageStatsManager.queryStatsForUid(applicationInfo.storageUuid, applicationInfo.uid);cachesize = storageStats.getCacheBytes();//缓存大小datasize = storageStats.getDataBytes();//数据大小codesize = storageStats.getAppBytes();//应用程序大小totalsize = cachesize + datasize + codesize ;
//                Log.i("hsh", "packageName:"+this.applicationInfo+",,"+cachesize + ",," + datasize + ",," + codesize+",,"+totalsize);setViewData();} catch (Exception e) {e.printStackTrace();}} else {//9.0及以上此方法无效,会抛出错误try {Method method = pm.getClass().getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);method.invoke(pm, this.applicationInfo.packageName, observer);}  catch (Exception e) {e.printStackTrace();}}}private void  setViewData(){try {ApplicationInfo app = mContext.getPackageManager().getApplicationInfo(this.applicationInfo.packageName, 0);PackageInfo packageInfo = pm.getPackageInfo(app.packageName, PackageManager.GET_SIGNATURES);//赋值缓存tvAppCacheData.setText(formateFileSize(datasize));//有些apk获取不到内存大小,所以通过file.length()去获取if (!TextUtils.isEmpty(applicationInfo.sourceDir)) {File file = new File(applicationInfo.sourceDir);tvAppMemoryData.setText(formateFileSize(file.length()));//赋值apk大小} else {tvAppMemoryData.setText(formateFileSize(codesize));}//获取版apk其他应用消息,比如说版本versionCode,versionName等tvAppVersionCode.setText(packageInfo.versionName);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}}//系统函数,字符串转换 long -String (kb)private String formateFileSize(long size){return Formatter.formatFileSize(mContext, size);}

清除缓存,通过反射deleteApplicationCacheFiles清除缓存数据,看了下没什么效果改成clearApplicationUserData后测试可以:

  public  void deleteDir(String packageName) {try {Method method = pm.getClass().getMethod("clearApplicationUserData",String.class,IPackageDataObserver.class);// 指定目标应用包名(如 com.example.app)method.invoke(pm, packageName, new IPackageDataObserver.Stub() {@Overridepublic void onRemoveCompleted(String pkg, boolean success) {// 清理完成回调Log.i(TAG, "onRemoveCompleted: "+pkg+"====="+success);ToastUtil.s(R.string.str_clear_cache);}});} catch (Exception e) {e.printStackTrace();}}

PS:查看底层代码发现8.0以后被强制抛出异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37195.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【保姆级教程】Windows系统+ollama+Docker+Anythingllm部署deepseek本地知识库问答大模型,可局域网多用户访问

目录 1.Ollama 本地化部署 DeepSeek R1 1.1下载Ollama 1.2安装Ollama 1.3安装DeepSeek R1大模型 2.系统环境配置 2.1开启系统功能 2.2安装wsl 3.安装 Docker Desktop并拉取Anythingllm镜像 3.1从 Docker 官网 下载并安装。 3.2拉取镜像 3.3运行 Docker 命令 4.anyth…

Sensodrive机器人力控关节模组SensoJoint在海洋垃圾清理机器人中的拓展应用

海洋污染已成为全球性的环境挑战&#xff0c;其中海底垃圾的清理尤为困难。据研究&#xff0c;海洋中约有2600万至6600万吨垃圾&#xff0c;超过90%沉积在海底。传统上&#xff0c;潜水员收集海底垃圾不仅成本高昂&#xff0c;而且充满风险。为解决这一问题&#xff0c;欧盟资助…

【redis】AOF 的基本工作机制,顺序写入,文件同步,重写机制

RDB 最大的问题&#xff0c;就是不能实时的持久化保存数据&#xff0c;在两次生成快照之间&#xff0c;实时的数据可能会随着重启而丢失 基本工作机制 AOF&#xff1a;append only file&#xff0c;类似于 MySQL 的 binlog&#xff0c;会把每个用户的每个操作&#xff0c;都记…

【C++】动态规划从入门到精通

一、动态规划基础概念详解 什么是动态规划 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是一种通过将复杂问题分解为重叠子问题&#xff0c;并存储子问题解以避免重复计算的优化算法。它适用于具有以下两个关键性质的问题&#xff1a; 最优子结构&…

数据可视化(matplotlib)-------辅助图标的设置

目录 一、认识图表常用的辅助元素 坐标轴 二、设置坐标轴的标签、刻度范围和刻度标签 &#xff08;一&#xff09;、设置坐标轴的标签 1、xlabel()------设置x轴标签 2、ylabel()------设置y轴标签 &#xff08;二) 、设置刻度范围和刻度标签 1、xlim()和ylim()函数分别可…

CSS 用于图片的样式属性

CSS 设置图像样式 CSS中用于图片的样式属性主要包括以下几个方面&#xff1a; ‌边框和背景‌&#xff1a; ‌border‌&#xff1a;可以设置图片的边框样式、宽度和颜色。例如&#xff0c;img { border: 1px solid #ddd; } 会给图片添加1像素的实线边框&#xff0c;颜色为灰色…

Redis解决缓存击穿问题——两种方法

目录 引言 解决办法 互斥锁&#xff08;强一致&#xff0c;性能差&#xff09; 逻辑过期&#xff08;高可用&#xff0c;性能优&#xff09; 设计逻辑过期时间 引言 缓存击穿&#xff1a;给某一个key设置了过期时间&#xff0c;当key过期的时候&#xff0c;恰好这个时间点对…

Object 转 JSONObject 并排除null和““字符串

public static JSONObject objToJSONObject(Object obj) throws Exception{//创建一个 HashMap 对象 map&#xff0c;用于存储对象的属性名和属性值。//key 是属性名&#xff08;String 类型&#xff09;&#xff0c;value 是属性值&#xff08;Object 类型&#xff09;Map<…

python实现接口自动化

代码实现自动化相关理论 代码编写脚本和工具实现脚本区别是啥? 代码&#xff1a; 优点&#xff1a;代码灵活方便缺点&#xff1a;学习成本高 工具&#xff1a; 优点&#xff1a;易上手缺点&#xff1a;灵活度低&#xff0c;有局限性。 总结&#xff1a; 功能脚本&#xff1a;工…

C++特性——RAII、智能指针

RAII 就像new一个需要delete&#xff0c;fopen之后需要fclose&#xff0c;但这样会有隐形问题&#xff08;忘记释放&#xff09;。RAII即用对象把这个过程给包起来&#xff0c;对象构造的时候&#xff0c;new或者fopen&#xff0c;析构的时候delete. 为什么需要智能指针 对于…

算法系列——有监督学习——4.支持向量机

一、概述 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种应用范围非常广泛的算法&#xff0c;既可以用于分类&#xff0c;也可以用于回归。 本文将介绍如何将线性支持向量机应用于二元分类问题&#xff0c;以间隔&#xff08;margin&#x…

网络安全之前端学习(HTML篇)

前言&#xff1a;网络安全中有一个漏洞叫xss漏洞&#xff0c;就是利用网页引发弹窗&#xff0c;这就要求我们看得懂源码&#xff0c;所以我会持续更新前端学习&#xff0c;可以不精通&#xff0c;但是一定要会&#xff0c;主要掌握HTML&#xff0c;css&#xff0c;js这三项技术…

大华HTTP协议在智联视频超融合平台中的接入方法

一. 大华HTTP协议介绍 大华HTTP协议是大华股份&#xff08;Dahua Technology&#xff09;为其安防监控设备开发的一套基于HTTP/HTTPS的通信协议&#xff0c;主要用于设备与客户端&#xff08;如PC、手机、服务器&#xff09;之间的数据交互。该协议支持设备管理、视频流获取、…

介绍一下TiDB、RocksDb、levelDB、LSM 树、SSTable。

LSM 树&#xff08;Log-Structured Merge-Tree&#xff09; 核心原理&#xff1a;通过将随机写转换为顺序写优化写入性能&#xff0c;适用于写密集型场景。数据首先写入内存中的 MemTable&#xff08;有序结构&#xff0c;如跳表&#xff09;&#xff0c;当达到阈值后转为 Imm…

Powershell WSL导出导入ubuntu22.04.5子系统

导出Linux子系统 导出位置在C盘下,根据自己的实际情况更改即可Write-Host "export ubuntu22.04.5" -ForegroundColor Green wsl --export Ubuntu-22.04 c:\Ubuntu-22.04.tar 导入Linux子系统 好处是目录可用在任意磁盘路径,便于迁移不同的设备之间Write-Host &quo…

Jmeter

Jmeter 官网地址 https://jmeter.apache.org/ 下载安装包 系统环境变量 变量值JMETER_HOMEG:\Application\apache-jmeter-5.6.3 修改成自己的安装目录CLASSPATH;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;Path%JMETER_HOME%\bin 中文界…

碰一碰发视频saas系统技术源头一站式开发文档

碰一碰发视频系统技术源头一站式开发文档 一、引言 在数字化信息传播高速发展的当下&#xff0c;如何让视频分享更便捷、高效&#xff0c;成为商家和开发者们关注的焦点。“碰一碰发视频”系统以其独特的交互方式和强大的功能优势&#xff0c;为视频分享领域带来了革命性变革。…

Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac‘.

What went wrong: Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac’. Could not resolve all files for configuration ‘:path_provider_android:androidJdkImage’. Failed to transform core-for-system-modules.jar to match attributes {…

学习笔记 ASP.NET Core Web API 8.0部署到iis

一.修改配置文件 修改Program.cs配置文件将 if (app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }修改为 app.UseSwagger(); app.UseSwaggerUI(); 二.安装ASP.NET Core Runtime 8.0.14 文件位置https://dotnet.microsoft.com/en-us/download/do…

一、小雅自带tutorial文件教程

下载压缩包 这是elegantrl的开源地址: ElegantRL 我使用的是云服务器平台&#xff0c;上传压缩包之后&#xff0c;使用Linux解压缩命令&#xff0c;将压缩包解压。 使用conda新建一个虚拟环境 conda create -n ElegantRL conda activate ElegantRL安装elegantrl包 pip ins…