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

简介:

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

view plaincopy to clipboardprint?
PackageManager packageManager = this.getPackageManager(); 
List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0); 
PackageManager packageManager = this.getPackageManager();
List<PackageInfo> packageInfoList = packageManager.getInstalledPackages(0);

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

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

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

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

获取应用的代码:

view plaincopy to clipboardprint?
/**
 * 查询手机内非系统应用
 * @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; 

 /**
  * 查询手机内非系统应用
  * @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;
 }

 

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

 

view plaincopy to clipboardprint?
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); 
     

                     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 类是我本地自定义的,各位可以忽略!

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

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

view plaincopy to clipboardprint?
/**
 * 查询手机内所有支持分享的应用
 * @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;   

 /**
  * 查询手机内所有支持分享的应用
  * @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。因此获取图片、应用名、包名的方法不一样,如下:

view plaincopy to clipboardprint?
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); 
     

                     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()

 

 

目录
打赏
0
0
0
0
66
分享
相关文章
如何通过DIY.JS快速构建出一个DIY手机壳、T恤的应用?
DIY.JS 是一款基于原生 Canvas 的业务级图形库,专注于商品定制的图形交互功能,帮助开发者轻松实现个性化设计。适用于 T 恤、手机壳等多种商品场景。它自带丰富功能,无需从零构建,快速集成到项目中。通过创建舞台、添加模型、定义 DIY 区域和添加素材四个步骤即可完成基础用法。支持在线演示体验,文档详细,易上手。
134 57
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
463 83
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
227 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
OmAgent 是 Om AI 与浙江大学联合开源的多模态语言代理框架,支持多设备连接、高效模型集成,助力开发者快速构建复杂的多模态代理应用。
527 72
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
156 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
3366 21
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
Mobile-Agent:通过视觉感知实现自动化手机操作,支持多应用跨平台
Mobile-Agent 是一款基于多模态大语言模型的智能代理,能够通过视觉感知自主完成复杂的移动设备操作任务,支持跨应用操作和纯视觉解决方案。
1768 10
Mobile-Agent:通过视觉感知实现自动化手机操作,支持多应用跨平台
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
130 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
1411 4

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问