`
Jclick
  • 浏览: 189342 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android获取安装的应用程序

 
阅读更多

在google上输入以上的关键字+ android,可以搜到的代码:

1
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);

 

虽然,有些代码号称可以过滤掉系统自身的应用程序,但是只要细看代码就会发现,好像里面的那个布尔变量没有起到什么过滤的作用。

  方法一:通过获取的安装包(包括安装的与系统自身的应用程序),对其android.content.pm.PackageInfo的packageName 进行过滤,

但是Anrodi与google的包比较容易过滤掉,但需要对不同产商进行适配;

  方法二:枚举 \data\app 文件夹,其下的*.apk文件 就是本机安装的软件,而\system\App下的*.apk文件就是系统自带的软件,

由于普通的程序是无法读取这两个文件夹的,需要root权限吧,因此该方法也行不通(用File.listFiles() + android.permission.FACTORY_TEST 权限 还是不能枚举出文件)

虽然不能枚举文件夹 "\data\app\",但我们可以访问(read)文件夹"\data\app\"下的所有文件,因此可以用如下的方法来获取本机上已经安装的软件(排除系统的应用程序):

1
2
3
4
5
6
7
8
9
10
PackageManager pckMan = getPackageManager();
List<PackageInfo> packs = pckMan.getInstalledPackages(0);
count = packs.size();
String name;
int installedNum = 0;
for(int i = 0; i < count; i++) {
                PackageInfo p = packs.get(i);
    if (p.versionName == null)
        continue;
    
1
2
3
4
5
6
7
8
9
10
             //判断该软件包是否在/data/app目录下
    File f1 = new File( "/data/app/" +  p.packageName + ".apk");
    if(!f1.exists()) continue;
 
    installedNum++;
    /**
     * 应用程序的名字
     */
    name = p.applicationInfo.loadLabel(pckMan).toString();
}

方法三、可以通过uid来过滤系统系统的安装包,因为android系统中的uid从 1000 ~ 9999 都是给系统程序保留的,所以只要判断package的uid > 10000即可判定该程序是非系统程序。

1
2
if(p.applicationInfo.uid > 10000)
   //非系统程序

 

uid是程序在安装的时候由系统分配的。

 方法四:这个方法应该是最优的。

1
2
3
4
5
6
7
8
9
ApplicationInfo appInfo = p.applicationInfo;
    /**
     * Value for {@link #flags}: if set, this application is installed in the
     * device's system image.
     */
if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0)
    //系统程序
else
    //不是系统程序

 转自:http://www.cnblogs.com/mengshu-lbq/archive/2010/09/09/1822237.html

分享到:
评论

相关推荐

    Android开发,获取当前手机安装的所有应用、根据包名获取应用信息、获取当前应用程序的包名、获取程序 图标等关于安装在手机上的

    Android开发,获取当前手机安装的所有应用、根据包名获取应用信息、获取当前应用程序的包名、获取程序 图标、获取程序的版本号、获取程序的名字、获取程序的权限、获取程序的签名、获取当前包名的 SHA1、将获取到得...

    Android中获取应用程序列表信息

    在Android系统中,获取应用程序列表信息是开发过程中常见的需求,比如构建应用管理界面或实现某些特定功能。以下将详细介绍如何通过编程方式实现这四个主要目标: 1. **Android中获取所有应用程序列表信息** 要...

    获取所有应用程序的数据

    在Android系统中,获取所有应用程序的数据是一个常见的需求,这通常涉及到获取用户安装的应用列表以及它们的相关信息,如图标、名称、包名等。在提供的代码段中,我们看到一个名为`getLaunchAppList`的方法,它实现...

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

    首先,我们需要了解Android系统的应用程序是如何组织的。每个应用程序都有一个唯一的包名(Package Name),它在整个Android系统中是独一无二的,类似于应用的身份标识。应用名称是用户在界面上看到的名称,而图标则...

    android获取应用程序的权限列表

    本文将详细讲解如何在Android系统中获取应用程序的权限列表,并针对日志记录中使用的"jishen" TAG进行讨论。 1. **权限模型概述** Android的权限模型基于声明式权限,开发者在应用的AndroidManifest.xml文件中声明...

    Android中获取所有应用程序信息

    `PackageManager`是Android提供的一个核心服务,它允许我们查询、安装、卸载以及管理设备上的应用程序。下面将详细讲解如何通过`queryIntentActivities()`方法获取应用信息。 首先,我们需要创建一个`Intent`对象,...

    Android中获取应用程序(包)的信息 PackageManager的使用

    它是Android系统服务的一部分,允许应用程序访问和操作其他已安装的应用程序的元数据。例如,你可以获取应用的名称、版本信息、权限、图标等。下面是一些主要的使用场景: 1. **查询应用信息**:通过调用`...

    Android获取应用程序的包大小\缓存大小\数据大小

    在Android开发中,有时我们需要获取应用程序的包大小、缓存大小以及数据大小,这有助于我们进行性能优化、存储管理或者用户信息展示。本教程将详细讲解如何利用反射和AIDL技术来实现这一功能。 首先,我们需要理解...

    Android获取指定应用,单独应用的流量统计

    本文将深入探讨如何在Android环境下,针对特定的应用程序,统计其在WiFi和GPRS(2G)网络下的数据流量。 首先,理解Android系统的流量统计机制是必要的。Android系统内置了对数据使用量的跟踪功能,它记录了每个...

    AppManager_Android获取手机里所安装的应用列表.rar

    首先,我们要了解在Android系统中,应用程序的信息存储在系统的Package Manager服务中。通过调用`PackageManager`类提供的方法,我们可以获取到设备上所有已安装应用的信息。`PackageManager`是Android SDK提供的一...

    android中获取应用程序包的信息

    在Android系统中,获取应用程序包的信息是一项常见的任务,这通常涉及到获取应用的图标、包名以及应用名称等元数据。本文将深入探讨如何在Android环境中实现这一功能,并结合提供的"packageinfo_adapterLearn"示例...

    Android获取系统已安装应用开发

    Android提供了`PackageManager`类,用于管理设备上的应用程序。你可以通过以下代码获取所有已安装的应用: ```java PackageManager packageManager = getPackageManager(); List&lt;ApplicationInfo&gt; installedApps = ...

    Android开发之系统信息【4】——获取Android已安装程序列表

    通过以上步骤,我们可以轻松地获取Android设备上已安装的应用程序列表,并根据需要对这些信息进行处理。这对于开发者来说是非常有用的功能,特别是在进行应用监控、统计分析等场景下。需要注意的是,在处理这些信息...

    android获取应用程序大小,缓存数据信息

    在Android系统中,获取应用程序的大小、数据大小以及缓存数据是开发者或用户进行性能优化、存储管理的重要操作。下面将详细介绍如何实现这些功能,并解释相关知识点。 首先,我们需要了解Android应用的存储结构。每...

    Android中获取应用程序(包)的信息-PackageManager的使用方法

    ### Android中获取应用程序(包)的信息—PackageManager的使用方法 #### 概述 在Android开发过程中,有时我们需要获取系统中应用程序的信息,例如包名(`packagename`)、标签(`label`)、图标(`icon`)以及占用...

    android开发之获取到应用程序的版本号以及应用的其他信息

    android开发之获取到应用程序的版本号以及应用的其他信息。博客详细介绍:http://blog.csdn.net/qq_21376985/article/details/51034060

    Android获取IP的程序

    在Android平台上开发应用程序时,有时候我们需要获取设备的IP地址,例如为了实现网络通信、设备定位或是其他网络相关的功能。这个“Android获取IP的程序”就是一个简单的解决方案,它可以帮助开发者快速集成这一功能...

    android 获取最近应用

    在Android系统中,获取最近使用的应用是开发过程中一个常见的需求,这可以帮助用户快速回溯到他们之前的操作,或者为你的应用程序提供个性化推荐。本篇将详细介绍如何在Android中实现这一功能。 首先,我们需要理解...

    android 获取手机中所有安装程序的信息

    `PackageManager`是Android系统服务之一,它提供了查询、安装、卸载应用程序的能力。以下是一个简单的示例代码: ```java PackageManager packageManager = getApplicationContext().getPackageManager(); List...

Global site tag (gtag.js) - Google Analytics