List allPackageInfoList = context.getPackageManager().getInstalledPackages(PackageManager.GET_PERMISSIONS);

// for 循环遍历每个packageinfo 拿对应的全新啊
String requestedPermissions[] = packageInfo.requestedPermissions;
ArrayList<ArrayList> thirdInfosLList = getPermissionInfosList(requestedPermissions, packageInfo, context);

//以下为相关函数
public static ArrayList<ArrayList> getPermissionInfosList(String[] requestedPermissions, PackageInfo packageInfo, Context context) {
ArrayList<ArrayList> llist = new ArrayList<ArrayList>(); //static 静态;arraylist数据列表;permission权限;string字符串;package包信息;//声明一个公用的静态获取权限列表,包含有权限请求信息,包信息,等
for (String permission : requestedPermissions) { //循环请求权限
try {
PermissionInfo permissionInfo = null;
String permissionType = null;//当权限信息和权限类型为空时
try {
permissionInfo = context.getPackageManager().getPermissionInfo(permission, 0);//当获取权限信息为0时
} catch (Exception e) {
e.printStackTrace();//返回原始错误信息
continue;
//Log.d(TAG, "PermissionInfo getPermissionInfo NameNotFoundException " + permission);
}//跳过log信息
if (permissionInfo != null) {
try {
Class<?> pkgManagerClazz = Class.forName(“android.content.pm.PermissionInfo”);//调用android.content.pm.PermissionInfo类方法
Method method = pkgManagerClazz.getDeclaredMethod(“protectionToString”, int.class);//给method对象赋值
permissionType = (String) method.invoke(null, permissionInfo.protectionLevel);//调用method对象的invoke方法,赋值为空后得到结果值转为字符串输出
} catch (Exception e) {
e.printStackTrace(); //返回原始错误信息
}

         //jsut for oppo devices//permissionType = PermissionInfo.protectionToString(permissionInfo.protectionLevel);}int permissionFlags = 0;   //permissionflags 许可标志if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {permissionFlags = permissionInfo.getProtectionFlags();}//赋值许可标志为0,如果android.sdk大于或等于mainfast的的源码版本且目标权限值等于获取的保护目标值//int permissionFlags = context.getPackageManager().getPermissionFlags(permission, packageInfo.packageName, UserHandle.OWNER);String permissionStateStr = permissionFlagToString(permissionFlags);int permissionResult = context.getPackageManager().checkPermission(permission, packageInfo.packageName);//定义权限结果等于包含(权限,权限信息,权限名的)的权限容器String permissionGranted = "Denied";   //权限被拒绝if (permissionResult == PackageManager.PERMISSION_GRANTED) {permissionGranted = "Granted";//权限被授予}ArrayList<String> arrayList = new ArrayList<String>();arrayList.add(permission);//数据列表增加权限arrayList.add(permissionType);//数据列表增加权限类型arrayList.add(permissionStateStr);//数据列表增加权限状态arrayList.add(permissionGranted);//数据列表增加已授予权限llist.add(arrayList);} catch (Exception e) {Log.d(TAG, " getThirdInfosLLisyt error ");e.printStackTrace();//返回原始错误信息}
}
return llist;

}

public static String getPermissionType(String perm, Context context) {//声明一个静态公用的获取权限类型的字符串
if (perm == “” || perm == null) {
return “NA”;
}
try {
PermissionInfo permissionInfo = context.getPackageManager().getPermissionInfo(perm, PackageManager.GET_META_DATA);
if (permissionInfo != null) {//如果权限信息不为空
String permissionType = PermissionInfo.protectionToString(permissionInfo.protectionLevel);//权限类型调用获取权限保护信息
return permissionType;
} else {
return “UNDEFINED”;
}
} catch (Exception e) {
e.printStackTrace();
return “UNDEFINED”;
}
}

public static String permissionFlagToString(int flags) {
StringBuilder flagsString = null;
while (flags != 0) {
if (flagsString == null) {
flagsString = new StringBuilder();
}
final int flag = 1 << Integer.numberOfTrailingZeros(flags);
flags &= ~flag;

 //cant invoke

// try {
// Class<?> pkgManagerClazz = Class.forName(“android.content.pm.PackageManager”);
// Method method = pkgManagerClazz.getDeclaredMethod(“permissionFlagToString”, int.class);
// flagsString.append(method.invoke(null, flag));
// } catch (Exception e) {
// e.printStackTrace();
// }
flagsString.append(permissionFlagToStringImplements(flag));

 //jsut for oppo devices//flagsString.append(PackageManager.permissionFlagToString(flag));if (flags != 0) {flagsString.append('|');}
}
if (flagsString != null) {return flagsString.toString();
} else {return "";
}

}

public static String permissionFlagToStringImplements(int flag) {
switch (flag) {
case FLAG_PERMISSION_GRANTED_BY_DEFAULT:
return “GRANTED_BY_DEFAULT”;
case FLAG_PERMISSION_POLICY_FIXED:
return “POLICY_FIXED”;
case FLAG_PERMISSION_SYSTEM_FIXED:
return “SYSTEM_FIXED”;
case FLAG_PERMISSION_USER_SET:
return “USER_SET”;
case FLAG_PERMISSION_REVOKE_ON_UPGRADE:
return “REVOKE_ON_UPGRADE”;
case FLAG_PERMISSION_USER_FIXED:
return “USER_FIXED”;
case FLAG_PERMISSION_REVIEW_REQUIRED:
return “REVIEW_REQUIRED”;
case FLAG_PERMISSION_REVOKE_WHEN_REQUESTED:
return “REVOKE_WHEN_REQUESTED”;
case FLAG_PERMISSION_USER_SENSITIVE_WHEN_GRANTED:
return “USER_SENSITIVE_WHEN_GRANTED”;
case FLAG_PERMISSION_USER_SENSITIVE_WHEN_DENIED:
return “USER_SENSITIVE_WHEN_DENIED”;
case FLAG_PERMISSION_RESTRICTION_INSTALLER_EXEMPT:
return “RESTRICTION_INSTALLER_EXEMPT”;
case FLAG_PERMISSION_RESTRICTION_SYSTEM_EXEMPT:
return “RESTRICTION_SYSTEM_EXEMPT”;
case FLAG_PERMISSION_RESTRICTION_UPGRADE_EXEMPT:
return “RESTRICTION_UPGRADE_EXEMPT”;
case FLAG_PERMISSION_APPLY_RESTRICTION:
return “APPLY_RESTRICTION”;
case FLAG_PERMISSION_GRANTED_BY_ROLE:
return “GRANTED_BY_ROLE”;
default:
return Integer.toString(flag);
}
}

求会java的大佬救一下场,领导让研究一个应用信息导出工具的代码实现原理,我之前没系统学过java,来个会的大佬帮忙解释下哈,跪谢...这个如果只是单纯实现抓取包名,应用名称的话代码可以怎么精简呀?相关推荐

  1. 你连原理都还没弄明白?java的基本单位

    内容简介: 本书一共15章,核心内容为SpringBoot.SpringCloud.Docker.RabbitMQ消息组件.其中,SpringBoot是SpringMVC技术的延伸,使用它进行程序开发 ...

  2. 你连原理都还没弄明白?java文档注释快捷键idea

    蚂蚁金服电话一面 第二天早上10点第一轮电话面试,我们大约聊了半个小时,关于学历工作经验这些都没有问到,对方关注的是一些基本的知识,具体记得的几个问题: Spring或者数据库的事物隔离级别和传播特性 ...

  3. java保存火车票信息_java抓取12306火车余票信息

    最近在弄一个微信的公众帐号,涉及到火车票查询,之前用的网上找到的一个接口,但只能查到火车时刻表,12306又没有提供专门的查票的接口.今天突然想起自己直接去12306上查询,抓取查询返回的数据包,这样 ...

  4. 基于微信小程序的家政服务预约系统(后台Java+SSM+MySQL)

    目 录 摘 要 I ABSTRACT II 1绪论 1 1.1选题背景及意义 1 1.2研究现状 1 1.3研究主要内容 2 2系统工具 3 2.1 Java语言 3 2.3 Vue.js框架 4 2 ...

  5. java如何对一个表达式开根号_作为一个零基础的新手,如何系统的自学Java和JavaEE开发技术?...

    0基础就找资料学习吧,建议不要看书,选择视频更好,对于新手来说,书本如果在没有人指导之下去看基本上很难看懂 在你学习Java之前一定要去了解一下这门语言,千万不要脑子热就选择来这行 如何系统的自学Ja ...

  6. java安装 2203_高手分析win7系统无法安装java程序提示“内部错误2203”的处理

    人吃五谷杂粮会生病,电脑也一样.工作运行时间久了就会出现很多的问题,比如win7系统无法安装java程序提示"内部错误2203"这样的状况,很多用户之前从未遇到win7系统无法安装 ...

  7. 基于JAVA网上家教信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA网上家教信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA网上家教信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 ...

  8. Java爬虫,信息抓取的实现

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23272657 今天公司有个需求,需要做一些指定网站查询后的数据的抓取,于是花了点 ...

  9. java自学要学多久(java自学要学多久)

    自学java,学多久可以自己找到工作? 那得看情况!如果你不是在校大学生,并且还没有接触过编程,建议你先自学一个星期C语言,初步编程入门,再去培训班进行培训,培训一期大概半年左右,然后在一边工作一边学 ...

  10. JAVA计算机毕业设计智慧社区信息管理系统开发Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计智慧社区信息管理系统开发Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计智慧社区信息管理系统开发Mybatis+源码+数据库+lw文档+系统+调试部 ...

最新文章

  1. 怎样用c语言解一元一次方程,问一道算法题目(解一元一次方程的问题)
  2. setting.xml的mirror、mirrorOf和pom.xml的repositories、repository的关系关联*
  3. zzUbuntu安装配置Qt环境
  4. 动态调整线程池_调整线程池的重要性
  5. Django与SQL语言中——NULL与空字符串的区别
  6. iOS平台快速发布HT for Web拓扑图应用
  7. npm error enoent:no such file or directory...are-we-there-yet ; package.json文件和node_modules模相互转化
  8. ARM汇编加载/存储指令
  9. 判断当前js运行的平台环境 取自vue源码
  10. CentOS7 Nexus安装
  11. file图片上传之前先预览
  12. 数值分析(4)-多项式插值: 埃尔米塔插值法
  13. 如何下载特定版本的bootstrap.min.css、bootstrap.min.js、jquery-3.5.1.min.js
  14. PS1545L-ASEMI低压降肖特基二极管PS1545L
  15. 华为手机显示切换服务器,手机切换云服务器
  16. C++ 的fcntl函数
  17. Linux(Centos7) 运行脚本程序,终端只返回 “已杀死”
  18. castle典范英语 storm_《典范英语·新版》与《牛津阅读树》书目对照表
  19. PAT乙级—1041 考试座位号 (15分)
  20. sql sever 索引和视图

热门文章

  1. android 指纹验证api
  2. mysql ix锁_mysql锁详解
  3. sap事务代码如何收藏_SAP仓库管理模块事务代码大全
  4. ElasticSearch 7.X的基础教程二(Es安装教程)
  5. 国外CPA广告联盟经验分享
  6. fflush(stdout)和fflush(stdin)
  7. 激活win10专业版最简单的方法
  8. Python可视化——随机漫步
  9. Key was created with errors:报错
  10. c语言自我介绍范文,个性的自我介绍范文5篇