`
chshevo
  • 浏览: 9740 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

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


转载:http://www.cnblogs.com/feng88724/archive/2011/02/21/1961222.html
分享到:
评论

相关推荐

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

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

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

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

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

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

    Android 获取手机所有apk包名

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

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

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

    Android获取已安装的apk信息

    综上所述,获取Android设备上已安装应用的信息主要依赖于`PackageManager`类,通过解析`PackageInfo`对象,我们可以获取到应用的图标、名称、包名和安装路径等关键信息。在编写代码时,记得处理好权限和版本兼容性...

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

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

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

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

    获取本机已安装的apk信息

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

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

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

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

    Android 获取未安装的APK图标、版本号、包名等信息方法是 Android 应用程序开发中的一种常见需求。通过本文,我们将学习如何获取未安装的APK图标、版本号、包名等信息,并了解相关的知识点。 一、获取APK图标 在 ...

    安卓获取apk包名类名

    在Android开发和软件测试中,了解如何获取APK的包名和主类名是一项重要的技能。这有助于测试人员定位应用程序的标识以及启动它的主要入口点。以下是对这一主题的详细阐述: 首先,APK包名是Android应用的唯一标识符...

    Android apk应用包名获取工具,以及源码

    在命令行中,你可以使用以下命令来获取已安装应用的包名: ```bash adb shell pm list packages -f | grep &lt;应用名&gt; ``` 这里替换`&lt;应用名&gt;`为你的应用名称,会显示出对应包名。 另一种方式是通过反编译APK获取。...

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

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

    获取第三方APK包名,启动类名

    在Android系统中,获取第三方APK的包名、启动类名以及图标是常见的需求,尤其在应用管理和自动化测试等领域。本文将详细介绍如何实现这些功能。 首先,我们要理解什么是APK包名。APK包名是Android应用程序的唯一...

    android获取手机应用的名称、图标、包名、安装时间以及更新时间

    在Android开发中,获取手机应用的名称、图标、包名、安装时间和更新时间是常见的需求。这涉及到对Android系统的理解,以及对Android SDK提供的API的熟练运用。以下将详细讲解如何实现这些功能。 首先,应用的名称...

    Android 获取apk声明的权限列表

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

    android获取已安装应用的信息

    在Android系统中,获取已安装应用的信息是一项常见的需求,例如,你可能想要列出手机上所有应用的名称、图标、版本信息等。这个过程涉及到对Android的Content Resolver和Package Manager服务的使用。接下来,我们将...

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

    在Android开发中,获取第三方APK的包名、启动类名以及图标是常见的需求,尤其在应用管理和自动化测试等领域。这个名为"获取第三方apk的包名启动类名icon.rar"的压缩包文件提供了相关的代码资源,尽管可能并非所有...

    Android系统信息和Apk应用信息获取.rar

    在Android平台上,获取系统信息和Apk应用信息是开发者日常工作中常见的需求。这个压缩包"Android系统信息和Apk应用信息获取.rar"可能包含了多个示例或者库,用于帮助开发者实现这些功能。由于无法直接查看具体内容,...

Global site tag (gtag.js) - Google Analytics