`
ictch
  • 浏览: 135347 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)

 
阅读更多

<script></script>

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

分享到:
评论

相关推荐

    获得获取手机中已安装apk文件信息

    ### 获取手机中已安装的APK文件信息 在Android开发中,经常需要获取手机中已安装的应用信息,例如为了提供给用户一个应用列表或者检查某些特定应用是否已经安装等场景。下面将详细介绍如何通过Android系统提供的`...

    Android 获取手机中已安装apk文件信息

    在Android系统中,获取手机中已安装的APK文件信息是一项常见的需求,这通常涉及到对设备上所有应用程序的管理和分析。`PackageManager`是Android提供的一个关键服务,它允许开发者获取到设备上安装的所有应用的信息...

    获取本机已安装的apk信息

    在Android系统中,获取本机已安装的APK(应用程序)信息是一项常见的需求,这有助于开发者分析设备上的应用状态,或者实现类似应用管理的功能。本文将深入探讨如何通过编程方式获取这些信息,主要关注Java和Kotlin两...

    android获取未安装APK文件的图标

    android获取未安装APK文件的图标 android开发技巧整理

    android获取手机已安装apk的信息异步操作

    在Android开发中,有时我们需要获取手机上已安装的APK应用信息,这可能涉及到应用的元数据、权限、版本信息等。本示例将详细解释如何实现这一功能,并通过异步加载来避免阻塞主线程,提升用户体验。下面我们将深入...

    java获取apk包名、版本、权限、图标、启动图等信息

    本主题将深入探讨如何使用Java来获取APK文件的相关信息,包括包名、版本、权限、图标以及启动图等关键元数据。这些信息对于理解和管理Android应用至关重要。 首先,我们从获取APK的包名开始。包名在Android中是应用...

    Android获取已安装的apk信息

    在Android系统中,获取已安装应用的信息是一项常见的需求,这对于开发者进行系统分析、管理或调试应用都至关重要。本文将详细讲解如何通过编程方式获取Android设备上已安装的apk信息,包括应用图标、应用名称、工程...

    获取本地已安装apk

    ### 获取本地已安装APK的知识点详解 #### 一、前言 在Android开发中,有时我们需要获取设备上已安装的应用列表,特别是那些非系统预装的应用程序(即用户自行安装的应用)。这样的需求常见于应用商店类应用或者...

    获取apk包名,版本号等信息的jar包

    在Android SDK中,Android的`PackageInfo`类提供了获取已安装应用信息的方法,但对未安装的APK文件,我们需要通过其他方式获取。 这里提到的"获取apk包名,版本号等信息的jar包"(apkinfo.jar),则是一个Java库,...

    获取已装应用程序apk的包名及SHA1码

    在Android系统中,开发者或用户有时需要获取已安装应用程序的包名(Package Name)和SHA1证书指纹(SHA1 Fingerprint)信息。这些信息在多种场景下非常有用,例如,当进行应用签名验证、集成第三方服务或者配置权限...

    Android 获取手机所有apk包名

    在Android平台上,获取手机上所有APK包名的需求通常是用于分析设备上安装的应用程序信息,例如统计应用数量、分析特定应用是否存在或者进行批量操作。这个过程涉及到对Android系统的权限访问以及对文件系统的操作。...

    Android 获取未安装的APK图标、版本号、包名等信息方法

    PackageManager提供了一个getPackageArchiveInfo方法,用于获取APK文件的信息,而PackageInfo则提供了一个loadIcon方法,用于加载APK图标。下面是一个获取APK图标的示例代码: ```java public static Drawable ...

    Android 获取apk声明的权限列表

    - 在Java或Kotlin代码中,可以使用`PackageInfo`类来获取已安装应用的权限信息。首先,你需要创建一个`PackageManager`对象,然后调用`getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)`方法,传入...

    获取第三方apk的包名启动类名icon.rar

    这里的`packageName`参数是你要查询的APK的包名,可以通过文件路径或者安装的应用来获取。`getPackageInfo()`方法返回一个`PackageInfo`对象,包含了包名以及其他详细信息。 接下来,我们讨论如何获取启动类名: ...

    获取android设备已安装应用信息(包名、图标、应用名)

    在Android平台上,获取已安装应用的信息是开发过程中常见的需求,这可以帮助我们构建各种功能,比如应用管理、推荐系统或是分析用户行为。本文将详细讲解如何通过编程方式获取Android设备上已安装应用的包名、应用...

    获取所有apk信息

    在Android系统中,获取手机上安装的软件信息是开发者或者普通用户经常需要进行的操作。这一过程涉及到Android的权限管理、SQLite数据库以及应用的元数据。本文将深入探讨如何获取APK(Android应用程序包)信息。 ...

    获取安装的apk

    获取设备上所有已安装的APK信息,可以通过遍历Android系统的PackageInfo对象来实现。这个过程涉及使用`PackageManager`服务,它提供了查询设备上所有应用的方法。以下是一个简单的示例代码: ```java ...

    Android中获取apk安装包信息的方法

    代码如下:/** * 获取apk包的信息:版本号,名称,图标等 * @param absPath apk包的绝对路径 * @param context */ public void apkInfo(String absPath,Context context) { PackageManager pm = context....

    java 获取apk包名和版本号

    这个项目可能是为了演示如何在不安装APK的情况下,通过读取APK文件获取这些信息。例如,你可以将APK文件路径作为输入,然后解析APK文件的元数据,获取包名和版本信息。 解析APK文件需要使用到`ZipFile`类,因为APK...

    java获取手机已安装APK的签名摘要

    本篇将详细讲解如何使用Java在Android环境中获取已安装APK的签名摘要信息。 首先,我们需要了解签名摘要的基本概念。签名摘要是一种哈希函数的输出结果,它将任意长度的信息转化为固定长度的摘要值,常见的摘要算法...

Global site tag (gtag.js) - Google Analytics