Android中级篇之区分系统程序和安装程序
2011-05-20 21:37:08
出处:http://www.cnblogs.com/mengshu-lbq/archive/2010/09/09/1822237.html
在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/"下的所有文件,因此可以用如下的方法来获取本机上已经安装的软件(排除系统的应用程序):
01
|
PackageManager pckMan = getPackageManager();
|
02
|
List<PackageInfo> packs = pckMan.getInstalledPackages(
0
);
|
05
|
int
installedNum =
0
;
|
06
|
for
(
int
i =
0
; i < count; i++) {
|
07
|
PackageInfo p = packs.get(i);
|
08
|
if
(p.versionName ==
null
)
|
02
|
File f1 =
new
File(
"/data/app/"
+ p.packageName +
".apk"
);
|
03
|
if
(!f1.exists())
continue
;
|
09
|
name = p.applicationInfo.loadLabel(pckMan).toString();
|
方法三
、可以通过uid来过滤系统系统的安装包,因为android系统中的uid从 1000 ~ 9999 都是给系统程序保留的,所以只要判断package的uid > 10000即可判定该程序是非系统程序。
1
|
if
(p.applicationInfo.uid >
10000
)
|
uid是程序在安装的时候由系统分配的。
方法四:这个方法应该是最优的。
1
|
ApplicationInfo appInfo = p.applicationInfo;
|
3
|
* Value for {@link #flags}: if set, this application is installed in the
|
4
|
* device's system image.
|
6
|
if
((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) >
0
)
|
//不是系统程序
Android源码上的方法
com/android/settings/ManageApplications.java
分享到:
相关推荐
Android开发之系统信息【4】——获取Android已安装程序列表Android开发之系统信息【4】——获取Android已安装程序列表
在组织上,《Android系统源代码情景分析(含CD光盘1张)》将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;...
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...
应用程序框架层主要包括系统服务,例如组件管理服务、应用程序安装服务、窗口管理服务、多媒体服务和电信服务等。应用程序框架进一步又分为C/C++和Java两个层次,Java代码运行Dalvik虚拟机之上,并且通过JNI方法和C/...
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序...
罗升阳-Android源码情景分析,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了...
罗升阳,2007年毕业于浙江大学计算机系,2010年毕业于上海交通大学计算机系,在国内知名IT技术社区CSDN上发表了数十篇高质量的Android系统原创性文章,并且开设博客专栏--《老罗的Android之旅。 在内容上,本书结合...
嵌入式Linux系统学习者:将Android作为一个集Linux核心和应用层程序于一体的系统进行学习,并可以利用Android的仿真环境运行和调试程序。 读者在学习本书的过程中,应尽量对照本书的框图和手头的Android源代码,...
Android系统结构和SDK使用;Android SDK的开发环境;Android应用程序的概述和框架;Android应用程序示例;Android应用程序的内容;Android的UI系统实现;视图组(ViewGroup)和布局(Layout)的使用
android RS232串口读写程序,内含jni程序代码,使用android studio打开编译
Android应用程序框架篇从组件、进程、消息以及安装四个维度来对Android应用程序的框架进行了深入的剖析。 通过上述内容及其组织,本书能使读者既能从整体上把握Android系统的层次结构,又能从细节上去掌握每一个层次...
Android应用程序主要由代码和资源组成。资源主要就是指那些与UI相关的东西,例如UI布局、字符串和图片等。代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI。这样就可使得应用程序只需要编译一次,就...
android, 中级,很好的学习文档,
在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇章。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动...
Android个人记账程序源码,给想做小系统的人参考
作 者: 左军 主编 出版时间: 2015 左军主编的这本《Android程序设计经典教程》 从初学者的角度出发,通过...本书适合Android入门级开发人员,初、中级程 序员,特别适合于程序开发人员作为Android开发的 参考书。
, 在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇章。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动...
利用自定义Adapter,将手机中所有程序的信息(图标、版本号等)显示在listview中