在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程序,获取所有应用程序的数据。
获取手机上android应用程序的权限列表,在打印log里,log的TAG是jishen
1.Android中获取所有应用程序列表信息 2.Android中获取系统应用程序列表信息 3.Android中获取第三方应用程序列表信息 4.Android中获取第三方应用程序列表信息
通过queryIntentActivities()方法,使用PackageManager,获取应用程序的信息使用
android开发之获取到应用程序的版本号以及应用的其他信息。博客详细介绍:http://blog.csdn.net/qq_21376985/article/details/51034060
Android中获取应用程序(包)的大小
利用反射和AIDL技术获取app的包大小\缓存大小\数据大小
android获取应用程序信息小Demo。应用名称,版本,缓存大小,应用程序大小等
在Android设备中,按Back键会将当前的Activity出栈销毁,而按HOME键却会将之隐藏到...如若有多个这样的程序这样操作,我们不知道后台到底有多少个正在运行的应用程序。此程序的目的就列举出后台正在运行的应用列表。
这个小程序主要实现了获取程序包的相关信息,主要包括包的icon,包名还有应用的名称。代码中有详细的注释,方便阅读。
Android中获取应用程序(包)的信息-PackageManager的使用方法
Android中获取应用程序(包)的信息 PackageManager的使用
已经成功获取应用程序的详细信息,程序大小,数据大小,缓存数据...大家放心使用。为了感谢大家的支持,大家先前提出分数太高的情况,我在此向大家表示歉意! 以后此资源下降为2分!
一个简单案例,可获取android系统所有应用程序列表,实现点击列表中的某一项,打开相应的应用
此例是优化后的代码: 1.Android获取系统程序列表 2.获取用户程序列表
Android获取Android系统程序信息.zip项目安卓应用源码下载Android获取Android系统程序信息.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
在Android应用程序中,有一类特殊的消息,是专门负责与用户进行交互的,它们就是触摸屏和键盘等输入事件。触摸屏和键盘事件是统一由系统输入管理器InputManager进行分发的。也就是说,InputManager负责从硬件接收...
Android中使用Intent获取其他应用程序信息的方法介绍.pdf 学习资料 复习资料 教学资源