【Android源码 栏目提醒】:以下是网学会员为您推荐的Android源码 -Android中级篇之区分系统程序和安装程序 - 综合课件,希望本篇文章对您学习有所帮助。
Android中级篇之区分系统程序和安装程序 2011-05-20 21:37:08 出处http://www.cnblogs.com/mengshu-lbq/archive/2010/09/09/1822237.html 在google上输入以上的关键字 android可以搜到的代码: 1 List packs getPackageManager.getInstalledPackages 0 虽然有些代码号称可以过滤掉系统自身的应用程序但是只要细看代码就会发现好像里面的那个布尔变量没有起到什么过滤的作用。
方法一 :通过获取的安装包包括安装的与系统自身的应用程序对其android.content.pm.PackageInfo的packageName 进行过滤 但是Anrodi与google的包比较容易过滤掉但需要对不同产商进行适配 方法二 :枚举 dataapp 文件夹其下的.apk文件 就是本机安装的软件而systemApp下的.apk文件就是系统自带的软件 由于普通的程序是无法读取这两个文件夹的需要root权限吧因此该方法也行不通用File.listFiles android.permission.FACTORY_TEST 权限 还是不能枚举出文件 虽然不能枚举文件夹 dataapp但我们可以访问read文件夹dataapp下的所有文件因此可以用如下的方法来获取本机上已经安装的软件排除系统的应用程序: 01 PackageManager pckMan getPackageManager 02 List packs pckMan.getInstalledPackages 0 03 count packs.size 04 String name 05 int installedNum 0 06 for int i 0 i count i 07 PackageInfo p packs.geti 08 if p.versionName null 09 continue 10 01 //判断该软件包是否在/data/app目录下 02 File f1 new File /data/app/ p.packageName .apk 03 if f1.exists continue 04 05 installedNum 06 / 07 应用程序的名字 08 / 09 name p.applicationInfo.loadLabelpckMan.toString 10 方法三 、可以通过uid来过滤系统系统的安装包因为android系统中的uid从 1000 9999 都是给系统程序保留的所以只要判断package的uid 10000即可判定该程序是非系统程序。
1 if p.applicationInfo.uid 10000 2 //非系统程序 uid是程序在安装的时候由系统分配的。
方法四这个方法应该是最优的。
1 ApplicationInfo appInfo p.applicationInfo 2 / 3 Value for link flags: if set this application is installed in the 4 devices system image. 5 / 6 if appInfo.flags ApplicationInfo.FLAG_SYSTEM 0 7 //系统程序 8 else //不是系统程序
Android源码上的方法 com/android/settings/ManageApplications.java
上一篇:
Android 2 3 SD卡挂载流程浅析 一
下一篇:
个人哪些方面的情况值得你在简历里做介绍?