在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
|
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开发,获取当前手机安装的所有应用、根据包名获取应用信息、获取当前应用程序的包名、获取程序 图标、获取程序的版本号、获取程序的名字、获取程序的权限、获取程序的签名、获取当前包名的 SHA1、将获取到得...
在Android系统中,获取应用程序列表信息是开发过程中常见的需求,比如构建应用管理界面或实现某些特定功能。以下将详细介绍如何通过编程方式实现这四个主要目标: 1. **Android中获取所有应用程序列表信息** 要...
在Android系统中,获取所有应用程序的数据是一个常见的需求,这通常涉及到获取用户安装的应用列表以及它们的相关信息,如图标、名称、包名等。在提供的代码段中,我们看到一个名为`getLaunchAppList`的方法,它实现...
首先,我们需要了解Android系统的应用程序是如何组织的。每个应用程序都有一个唯一的包名(Package Name),它在整个Android系统中是独一无二的,类似于应用的身份标识。应用名称是用户在界面上看到的名称,而图标则...
本文将详细讲解如何在Android系统中获取应用程序的权限列表,并针对日志记录中使用的"jishen" TAG进行讨论。 1. **权限模型概述** Android的权限模型基于声明式权限,开发者在应用的AndroidManifest.xml文件中声明...
`PackageManager`是Android提供的一个核心服务,它允许我们查询、安装、卸载以及管理设备上的应用程序。下面将详细讲解如何通过`queryIntentActivities()`方法获取应用信息。 首先,我们需要创建一个`Intent`对象,...
它是Android系统服务的一部分,允许应用程序访问和操作其他已安装的应用程序的元数据。例如,你可以获取应用的名称、版本信息、权限、图标等。下面是一些主要的使用场景: 1. **查询应用信息**:通过调用`...
在Android开发中,有时我们需要获取应用程序的包大小、缓存大小以及数据大小,这有助于我们进行性能优化、存储管理或者用户信息展示。本教程将详细讲解如何利用反射和AIDL技术来实现这一功能。 首先,我们需要理解...
本文将深入探讨如何在Android环境下,针对特定的应用程序,统计其在WiFi和GPRS(2G)网络下的数据流量。 首先,理解Android系统的流量统计机制是必要的。Android系统内置了对数据使用量的跟踪功能,它记录了每个...
首先,我们要了解在Android系统中,应用程序的信息存储在系统的Package Manager服务中。通过调用`PackageManager`类提供的方法,我们可以获取到设备上所有已安装应用的信息。`PackageManager`是Android SDK提供的一...
在Android系统中,获取应用程序包的信息是一项常见的任务,这通常涉及到获取应用的图标、包名以及应用名称等元数据。本文将深入探讨如何在Android环境中实现这一功能,并结合提供的"packageinfo_adapterLearn"示例...
Android提供了`PackageManager`类,用于管理设备上的应用程序。你可以通过以下代码获取所有已安装的应用: ```java PackageManager packageManager = getPackageManager(); List<ApplicationInfo> installedApps = ...
通过以上步骤,我们可以轻松地获取Android设备上已安装的应用程序列表,并根据需要对这些信息进行处理。这对于开发者来说是非常有用的功能,特别是在进行应用监控、统计分析等场景下。需要注意的是,在处理这些信息...
在Android系统中,获取应用程序的大小、数据大小以及缓存数据是开发者或用户进行性能优化、存储管理的重要操作。下面将详细介绍如何实现这些功能,并解释相关知识点。 首先,我们需要了解Android应用的存储结构。每...
### Android中获取应用程序(包)的信息—PackageManager的使用方法 #### 概述 在Android开发过程中,有时我们需要获取系统中应用程序的信息,例如包名(`packagename`)、标签(`label`)、图标(`icon`)以及占用...
android开发之获取到应用程序的版本号以及应用的其他信息。博客详细介绍:http://blog.csdn.net/qq_21376985/article/details/51034060
在Android平台上开发应用程序时,有时候我们需要获取设备的IP地址,例如为了实现网络通信、设备定位或是其他网络相关的功能。这个“Android获取IP的程序”就是一个简单的解决方案,它可以帮助开发者快速集成这一功能...
在Android系统中,获取最近使用的应用是开发过程中一个常见的需求,这可以帮助用户快速回溯到他们之前的操作,或者为你的应用程序提供个性化推荐。本篇将详细介绍如何在Android中实现这一功能。 首先,我们需要理解...
`PackageManager`是Android系统服务之一,它提供了查询、安装、卸载应用程序的能力。以下是一个简单的示例代码: ```java PackageManager packageManager = getApplicationContext().getPackageManager(); List...