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

本文主要是介绍Android获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

众所周知,通过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()

原文地址:点击打开链接

这篇关于Android获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Linux下安装Anaconda3全过程

《Linux下安装Anaconda3全过程》:本文主要介绍Linux下安装Anaconda3全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录简介环境下载安装一、找到下载好的文件名为Anaconda3-2018.12-linux-x86_64的安装包二、或者通

MySQL 安装配置超完整教程

《MySQL安装配置超完整教程》MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典MySQLAB公司开发,目前属于Oracle公司旗下产品,:本文主要介绍MySQL安装配置... 目录一、mysql 简介二、下载 MySQL三、安装 MySQL四、配置环境变量五、配置 MySQL5.1

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

如何解决yum无法安装epel-release的问题

《如何解决yum无法安装epel-release的问题》:本文主要介绍如何解决yum无法安装epel-release的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录yum无法安装epel-release尝试了第一种方法第二种方法(我就是用这种方法解决的)总结yum

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结