zoukankan      html  css  js  c++  java
  • Android上获取本机安装的应用程序

    虽然,有些代码号称可以过滤掉系统自身的应用程序,但是只要细看代码就会发现,好像里面的那个布尔变量没有起到什么过滤的作用。

      方法一:通过获取的安装包(包括安装的与系统自身的应用程序),对其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
        //不是系统程序
  • 相关阅读:
    Socket
    剑指 Offer 14- I. 剪绳子
    剑指 Offer 29. 顺时针打印矩阵
    判断二分图
    vue生命周期以及常用标签
    滑动窗口
    二叉树
    常用算法
    动态规划
    蓄水池抽样
  • 原文地址:https://www.cnblogs.com/xilin/p/2608845.html
Copyright © 2011-2022 走看看