在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

更多相关文章

  1. Android 获取控件高度宽度三种方法,防止0的出现
  2. android 获取系统电量
  3. android4.4系统永不锁屏
  4. android打电话程序
  5. android获取控件的几种方法
  6. Android adb.exe程序启动不起来
  7. android 从系统相册获取一张图片

随机推荐

  1. Android从assets和raw中读取txt文件
  2. Android(安卓)的 KeyEvent : 從 EventHub
  3. LibGDX_1.4: Android(安卓)环境搭建:Eclip
  4. android中的触摸事件处理过程详解
  5. android studio 超长log打印,解决log打印
  6. Android(安卓)HttpClient用法
  7. 发邮件
  8. AndroidのActivity跳转数据通信和跳转动
  9. 使用SAX或者DOM或者XmlPullParser解析XML
  10. Android学习笔记(二)–Android(安卓)View绘