【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

Android11及以上APP无法获取到所有安装包的问题 在创建应用时,请务必考虑您的应用打算访问的已在设备上安装的一组其他应用。如果您的应用以 Android 11(API 级别 30)或更高版本为目标平台,在默认情况下,系统会自动让部分应用对您的应用可见,但会过滤掉其他应用。本指南将介绍如何让上述其他应用对您的应用可见。 如果您的应用以 Android 11 或更高版本为目标平台,并且需要与应用(自动可见的应用除外)交互,请在您应用的清单文件中添加 元素。在 元素中,按软件包名称、按 intent 签名或按 Provi... 阅读详情

众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下

PackageManager packageManager = this.getPackageManager();
List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);

通过以上方法,可以得到手机中安装的所有应用程序,既包括了手动安装的apk包的信息,也包括了系统预装的应用软件的信息,要区分这两类软件可使用以下方法:

a.从packageInfoList获取的packageInfo,再通过packageInfo.applicationInfo获取applicationInfo。

b.判断(applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)的值,该值大于0时,表示获取的应用为系统预装的应用,反之则为手动安装的应用。

大家可以看下代码,说明已经写在注释中。

获取应用的代码:

	/**
	 * 查询手机内非系统应用
	 * @param context
	 * @return
	 */
	public static List<PackageInfo> getAllApps(Context context) {
		List<PackageInfo> apps = new ArrayList<PackageInfo>();
		PackageManager pManager = context.getPackageManager();
		//获取手机内所有应用
		List<PackageInfo> paklist = pManager.getInstalledPackages(0);
		for (int i = 0; i < paklist.size(); i++) {
			PackageInfo pak = (PackageInfo) paklist.get(i);
			//判断是否为非系统预装的应用程序
			if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
				// customs applications
				apps.add(pak);
			}
		}
		return apps;
	}

获取图片、应用名、包名:


	                    PackageManager pManager = MessageSendActivity.this.getPackageManager();
	                    List<PackageInfo> appList  = Utils.getAllApps(MessageSendActivity.this);
	                    
	                    for(int i=0;i<appList.size();i++) {
	                    	PackageInfo pinfo = appList.get(i);
	                    	ShareItemInfo shareItem = new ShareItemInfo();
	                    	//set Icon
	    	                shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));
	                    	//set Application Name
	                    	shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());
	                    	//set Package Name 
	                    	shareItem.setPackageName(pinfo.applicationInfo.packageName);
	                    	
	                    }

其中 ShareItemInfo 类是我本地自定义的,各位可以忽略!

另为,有人可能在找 分享应用列表,在此一并说下吧。

获取支持分享的应用的代码:

	/**
	 * 查询手机内所有支持分享的应用
	 * @param context
	 * @return
	 */
	public static List<ResolveInfo> getShareApps(Context context){
	    List<ResolveInfo> mApps = new ArrayList<ResolveInfo>();  
	    Intent intent=new Intent(Intent.ACTION_SEND,null);  
	    intent.addCategory(Intent.CATEGORY_DEFAULT);  
	    intent.setType("text/plain");  
	    PackageManager pManager = context.getPackageManager();
	    mApps = pManager.queryIntentActivities(intent,PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);  
	    
	    return mApps;  
	}

由于该方法,返回的并不是 PackageInfo 对象。而是 ResolveInfo。因此获取图片、应用名、包名的方法不一样,如下:

	                    PackageManager pManager = MessageSendActivity.this.getPackageManager();
	                    
	                    /*********************查询手机内所有支持分享的应用*********************/
	                    List<ResolveInfo> resolveList  = Utils.getShareApps(MessageSendActivity.this);
	                    
	                    for(int i=0;i<resolveList.size();i++) {
	                    	ResolveInfo resolve = resolveList.get(i);
	                    	ShareItemInfo shareItem = new ShareItemInfo();
	                    	//set Icon
	    	                shareItem.setIcon(resolve.loadIcon(pManager));
	                    	//set Application Name
	                    	shareItem.setLabel(resolve.loadLabel(pManager).toString());
	                    	//set Package Name 
	                    	shareItem.setPackageName(resolve.activityInfo.packageName);
	                    	
	                    }

总结:

 

 

通过 PackageInfo  获取具体信息方法:


包名获取方法:packageInfo.packageName

icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)

应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)

使用权限获取方法:packageManager.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS)

.requestedPermissions


通过 ResolveInfo 获取具体信息方法:


包名获取方法:resolve.activityInfo.packageName

icon获取获取方法:resolve.loadIcon(packageManager)

应用名称获取方法:resolve.loadLabel(packageManager).toString()

 

来源:http://blog.youkuaiyun.com/feng88724/article/details/6198446#

Package Viewer-1.7.2.apk 安卓查看已安装应用原始包名工具 立即下载

相关推荐

PackageViewer:Android套餐信息查看器

包查看器 Android本机应用查看器,快速查看包名,版本号,签名信息

getInstalledPackages的参数详解

getInstalledPackages

u014729294的专栏 6655

告别VMware Tools!用open-vm-tools在Ubuntu 22.04上搞定共享文件夹(附开机自动挂载)

本文详细介绍了在Ubuntu 22.04上使用open-vm-tools替代VMware Tools实现高效共享文件夹管理的方法。通过开源工具open-vm-tools,用户可避免传统方案的兼容性问题,享受自动适配内核、系统更新同步等优势。文章包含从安装配置到开机自动挂载的全流程指导,特别适合在VMware虚拟机中运行Ubuntu Desktop的开发者提升工作效率。

weixin_32520095的博客 584

Android之ResolveInfo

\samples\ApiDemos中含有大量的代码,其中首页ListActivity中核心代码如下: List myData = new ArrayList(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE); Packag

u011002656的专栏 6709

SQL实现数据仓库ETL:分层设计、增量抽取与性能优化实践

在数据仓库建设过程中,ETL(抽取、转换、加载)是数据流转的核心环节。传统观点常将ETL与专业工具或大数据框架绑定,但在中小规模数据场景下,基于SQL的ETL方案凭借低门槛、高可维护性和直观的排错体验,成为高效且务实的选择。本文从ETL的基础概念出发,阐述数据仓库分层(ODS、DWD、DWS、ADS)中每层ETL的定位与职责,重点剖析增量抽取策略(时间戳、主键、日志)下的SQL实现方式,以及数据清洗、去重和格式化的常见写法。同时,结合真实项目经验,分享慢SQL优化技巧、任务调度依赖设计、幂等性保障和常见问题

weixin_33290540的博客 346

Raid5损坏两块盘

  以下为浪潮Inspur NF5460M4型号服务器故障处理过程: 设备raid5组损坏两块硬,并raid组处理离线状态,情况如图:     由于硬盘数据比较重要,面对此情况不要慌我们尽量做到安全保守的保证数据尽可能完整,以下为处理方法,(遇raid5两块盘出现问题处理方法)   以下截图均为遇相同问题的解决图案,并非现场截图。 Ctrl+H 进WebBios界面,发现两...

chen_lipeng的博客 2万+

【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏

<br />【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏 <br />众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下<br />view plaincopy to clipboardprint?<br />PackageManager packageManager = this.getPackageManager();   <br />List<PackageInfo> p

zn01611的专栏 1589

手把手教你解决uniapp中esbuild版本冲突问题(Mac版专属指南)

本文是针对Mac平台uniapp开发者的专属指南,详细解析了运行项目时常见的`Cannot start service`错误,即esbuild的Host版本与binary版本不匹配问题。文章从错误根源入手,提供了从快速应急处理到彻底根治的完整解决方案,包括手动替换二进制文件、锁定依赖版本、清理缓存及优化工具链配置,旨在帮助开发者高效解决版本冲突,恢复并稳定开发环境。

i0j1k2l3m的博客 459

【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)...

众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 PackageManager packageManager = this.getPackageManager(); List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0); 通过以...

490

Yield Management软件:Lam Research二次开发_(5).缺陷分析与分类方法

在半导体制造过程中,缺陷分析和分类是提高良率管理(Yield Management)的关键步骤。通过准确地识别和分类缺陷,可以更好地理解工艺过程中的问题,从而采取有效的措施来提高生产效率和产品质量。本节将详细介绍缺陷分析和分类的方法,包括缺陷检测、特征提取、分类算法及其在Lam Research软件中的应用。

2401_87715305的博客 690

【漏洞复现】CVE-2024-44902 Thinkphp反序列化漏洞

Thinkphp v6.1.3至v8.0.4版本中存在反序列化漏洞,攻击者可利用此漏洞执行任意代码。

渗透之路,攻防之间皆学问 6709

【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) .

众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 PackageManager packageManager = this.getPackageManager();   List packageInfoList = packageManager.getInstalledPackages(0);   PackageManager p

漠然一笑 Blog 1401

MAVLink协议详解

MAVLink是为微型飞行器MAV(Micro Air Vehicle)设计的(LGPL)开源的通讯协议。是无人飞行器和地面站(Ground Control Station ,GCS)之间,以及无人飞行器之间通讯常用的协议。APM、PIXHAWK飞控,Mission Planner、QGroundControl地面站均使用了MAVLink协议进行通讯。 MAVLink源码下载地址(现已更新至v2.0):https://github.com/mavlink/qgroundcontrol   用户手册:ht

程序猿老樊的博客 7705

【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等

<br />转自: http://blog.youkuaiyun.com/feng88724/archive/2011/02/21/6198446.aspx<br /> <br /><br />众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下<br /> view plaincopy to clipboardprint?PackageManager packageManager = this.getPackageManager();  List<PackageInfo> p

shlpyy的专栏 1956

Apache Flink连载(一):Apache Flink是什么?

Apache Flink 是一个框架和分布式处理引擎,用于在。

qq_32020645的博客 1216

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 【Android进阶】嵌套TabHost (TabHost中放TabHost,类似二级目录、二级树)
下一篇: Android Launcher研究(一)-----------图文详解手把手教你在Windows环境下下载Android源码(Launcher为例)
SpeedyCoder
博客等级 码龄14年 415粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值