获取手机中所有安装的程序

获取手机中所有安装的程序

  • PackageManger
    包管理者封装了当前应用程序的所有信息,可以通过包管理者拿到当前应用程序的所有信息。
  • PackageInfo
    该类封装了应用程序清单文件中的所有信息。可以通过这个类拿到当前应用程序的版本
/**
 * 返回应用程序的信息
 */
public static List<AppInfo> getAppinfos(Context context){
    PackageManager pm = context.getPackageManager();
    //如果后面想通过PackageInfo拿到每个程序的权限信息,那么这里getInstalledPackages的参数就必须是
    //PackageManager.GET_PERMISSIONS,不然后面通过PackageInfo就无法得到应用程序清单中申请的权限
    List<PackageInfo>  packinfos = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS );
    List<AppInfo> appinfos = new ArrayList<AppInfo>();
    for(PackageInfo info : packinfos){
        AppInfo appInfo = new AppInfo();
        appInfo.setPackname(info.packageName);
        appInfo.setVersion(info.versionName);
        appInfo.setAppName(info.applicationInfo.loadLabel(pm).toString());
        appInfo.setAppIcon(info.applicationInfo.loadIcon(pm));
        if((info.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE)==0){//通过这个来判断安装到了手机还是SD卡
            appInfo.setInRom(true);
        }else{
            appInfo.setInRom(false);
        }
        //判断程序是不是系统程序
        if(filterApp(info.applicationInfo)){
            appInfo.setUserApp(true);
        }else{
            appInfo.setUserApp(false);
        }
        //获取到某个应用程序的全部权限信息.
        String[] permissions = info.requestedPermissions;
        if(permissions!=null && permissions.length>0){
            for(String p: permissions){
                if("android.permission.INTERNET".equals(p)){
                    appInfo.setUseNetwork(true);
                }else if("android.permission.ACCESS_FINE_LOCATION".equals(p)){
                    appInfo.setUseGPS(true);
                }else if("android.permission.READ_CONTACTS".equals(p)){
                    appInfo.setUseContact(true);
                }
            }
        }
        appinfos.add(appInfo);
        appInfo = null;
    }
    return appinfos;
}
/**
 * 该方法提供了用于判断一个程序是系统程序还是用户程序的功能。
 * @param info
 * @return true 用户自己安装的软件
 *         fasle  系统软件.
 */
public  static boolean filterApp(ApplicationInfo info) {
    if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
        return true;
    } else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
        return true;
    }
    return false;
}

  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值