如何获取每个权限的保护级别?

2024-01-23

我试图列出所选应用程序中每个权限的保护级别,对于下面给出的代码。但我不知道如何完成它。

ArrayList<String> list_permission = new ArrayList<String>();
        String[] reqp = info.requestedPermissions;
        if (reqp != null) {
            for (i = 0; i < reqp.length; i++) {

                k = i + 1;

                String a = reqp[i];
                if (a.contains("android.permission.")) {
                    String aa[] = a.split("android.permission.");
                    list_permission.add(aa[1]);
                } else {
                    list_permission.add(a);
                }

            }

        }

谁能帮我解决这个问题...只想在权限前面添加保护级别。


您可以使用包管理器 http://developer.android.com/reference/android/content/pm/PackageManager.html class 获取权限信息() http://developer.android.com/reference/android/content/pm/PackageManager.html#getPermissionInfo%28java.lang.String,%20int%29方法得到权限信息 http://developer.android.com/reference/android/content/pm/PermissionInfo.html任何特定权限的对象。权限信息 http://developer.android.com/reference/android/content/pm/PermissionInfo.html对象有属性防护等级 http://developer.android.com/reference/android/content/pm/PermissionInfo.html#protectionLevel可用于检查任何权限的保护级别...您可以根据中定义的常量进行检查许可信息 http://developer.android.com/reference/android/content/pm/PermissionInfo.html类如PROTECTION_FLAG_SYSTEM.

就像下面的代码:

for (PermissionInfo permission : packageInfo.permissions) {
    // Dump permission info
    String protectionLevel;
    switch(permission.protectionLevel) {
    case PermissionInfo.PROTECTION_NORMAL : protectionLevel = "normal"; break;
    case PermissionInfo.PROTECTION_DANGEROUS : protectionLevel = "dangerous"; break;
    case PermissionInfo.PROTECTION_SIGNATURE : protectionLevel = "signature"; break;
    case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM : protectionLevel = "signatureOrSystem"; break;
    default : protectionLevel = "<unknown>"; break;
    }
    Log.i("PermissionCheck", permission.name + " " + protectionLevel);
  }

UPDATE:

要获得以下保护级别requestedPermissions:

String[] reqp = info.requestedPermissions;
String perm = reqp[i];
if (perm.contains("android.permission.")) {
    try {
        PermissionInfo pi = getPackageManager().getPermissionInfo(perm, PackageManager.GET_META_DATA);
        String protctionLevel = "unknown";

        switch(pi.protectionLevel) {
            case PermissionInfo.PROTECTION_NORMAL : protctionLevel = "normal"; break;
            case PermissionInfo.PROTECTION_DANGEROUS : protctionLevel = "dangerous"; break;
            case PermissionInfo.PROTECTION_SIGNATURE : protctionLevel = "signature"; break;
            case PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM : protctionLevel = "signatureOrSystem"; break;
            case PermissionInfo.PROTECTION_FLAG_SYSTEM : protctionLevel = "system"; break;
            default : protctionLevel = "<unknown>"; break;
        }
        list_permission.add(perm + "        "+protctionLevel);
    } catch (NameNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

} else {
    list_permission.add(perm);
}

以下行仅适用于 API 级别 16 或更高级别:

        case PermissionInfo.PROTECTION_FLAG_SYSTEM : protctionLevel = "system"; break;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取每个权限的保护级别? 的相关文章

  • 如何在Android 4.2中更改Action Bar选项菜单的背景颜色?

    我想更改 Android 4 2 中选项 溢出 菜单的背景颜色 我已经尝试了所有方法 但它仍然显示主题设置的默认颜色 我使用了以下代码和 XML 配置 MainActivity java public class MainActivity
  • 在Java中测试服务器是否启动的正确方法?

    简单地查看是否可以建立与网站 服务器的连接的正确方法是什么 我想要这个用于我正在编码的应用程序 如果我的网站离线 它只会提醒我 Thanks 您可以使用 HttpURLConnection 发送请求并检查响应正文中是否有该页面特有的文本 而
  • Twowayview 滚动时自动添加内边距

    我在用双向视图 https github com lucasr twoway view在我的一个项目中 这是android的扩展回收者视图 https developer android com reference android supp
  • 如何在android中批量插入sqlite

    我正在使用 SQLiteOpenHelper 进行数据插入 我需要插入2500个id和2500个名字 所以花费了太多时间 请任何人帮助我如何减少插入时间 我们可以一次插入多条记录吗 任何人都可以帮助我 先感谢您 代码 public clas
  • 如何将Android中的cURL发送到REST服务

    我是 android 新手 我想从 REST 服务获取一些数据 但在初始化发送到 REST 服务的方法时遇到一些问题 您知道 REST 服务使用 cURL 来操作一些数据 POST PUT GET DELETE 现在如何在 android
  • 当前版本的Android Gradle插件不支持按需配置

    升级到 Android Studio 3 1 2 后 出现以下错误 当前版本的 Android Gradle 插件不支持按需配置 因为您使用的是 Gradle 4 6 或更高版本 建议 通过在 gradle properties 文件中设置
  • android.view.InflateException:二进制 XML 文件行 #11:膨胀类 ImageView 时出错

    我只是尝试制作一个小的 android java xml 应用程序来计算游戏的分数 它给了我这个错误 Error inflateing class ImageView 有人知道解决方案吗 我实际上搜索了 ppl 说添加这个 android
  • 尝试获取屏幕上绘制的每个随机圆圈的 x、y 坐标

    您好 我正在制作一款游戏 该游戏将在屏幕上创建随机圆圈 随机创建的圆圈的值为红色或绿色 我的问题是 我希望不仅能够确定用户何时单击其中一个圆圈 而且还能够确定他们最终单击的圆圈 红色或绿色 下面是我的代码 我的主要问题是试图找到将要绘制的圆
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • startActivityForResult中的requestCode是什么意思

    我想知道我是否正确理解 requestCode 的概念 这个整数的用途是什么 我将其设置为哪个整数有关系吗 private static int CAMERA REQUEST 谢谢 requestCode 可帮助您识别您从哪个 Intent
  • Android ViewModel LiveData 在按钮单击时更新视图

    我正在关注这个tutorial https developer android com topic libraries architecture guide html common problems faced by app develop
  • Android WebView文件上传

    我正在开发一个 Android 应用程序 基本上它是一个WebView和一个进度条 Facebook 的移动网站 m facebook com 已加载到WebView 当我单击 选择文件 按钮上传图像时 没有任何反应 我已经尝试了所有的解决
  • 调整 SwipeRefreshLayout 高度,将 View 置于其底部

    I have SwipeRefreshLayout里面一个RelativeLayout 问题是SwipeRefreshLayout占据了屏幕上的所有位置 我需要放置一个视图after这个观点 看图片 https i stack imgur
  • 将触摸事件从 NestedScrollView 传递到父视图

    我在 NestedScrollView 下方有一个 ViewPager 宽度一些顶部填充 以及 ClipToPadding false 和透明背景 如图像 我的 ViewPager 无法获取触摸事件并且无法工作 我怎么解决这个问题 我无法更
  • LinearLayout:防止最后一个孩子被之前的大文本视图推出或挤压

    我有一个LinearLayout里面有两个孩子 第一个是TextView对于动态内容 第二个是一个按钮 我的问题是按钮被推出其父级或被挤压到不再可见的程度 我想要TextView认识到其父母与第二个孩子一起没有更多空间 并开始新的一行 而不
  • 如何从一个活动检索 Double 值到另一活动?

    我制作了一个包含 2 个活动的应用程序 其中第一个活动包含一些 EditText 十进制数字 另一个活动也包含一些 EditText 十进制 现在我想将一个 EditText 的值传递给另一个 但作为 双 而不是作为一个字符串 因为该值将用
  • 按“重置应用程序首选项”后,我的应用程序的所有权限都被撤销

    我开发了一个应用程序 支持Android 6 0 当我在 设置 gt 应用程序 gt 重置应用程序首选项 中重置应用程序首选项时 我的应用程序的所有权限都将被撤销 并且应用程序不会重新启动 撤销权限后未能重新启动应用程序可能会导致许多意外崩
  • Android Studio 中自动打开“运行设备”选项卡

    在 Android Studio Flamingo 中有一个名为跑步设备并且它会在每次之后自动打开运行应用程序 有办法禁止这个自动打开吗 我尝试禁用启用物理 Android 设备的镜像选项 但选项卡仍然自动打开 基于此issue https
  • Android - 如何简单地拖放按钮?

    我在这里找到了一个适合初学者的教程 http androidrox wordpress com 2011 05 13 android sample app drag and drop image using touch http andro
  • Android 版本低于 Lollipop 时出现 java.lang.NoClassDefFoundError

    我有一台运行 Android 21 的 Nexus 5 设备 我正在测试我的项目 没有任何问题 但是 如果我使用 Google API 19 在模拟器上进行测试 则会显示错误java lang NoClassDefFoundError 如果

随机推荐

  • 检查引荐来源网址

    我用它来检查某人是否来自 Reddit 但它不起作用 var ref document referrer if ref match http www reddit com gi alert You came from Reddit else
  • JavaScript 类型的最大大小?

    通过研究 javascript 类型 我试图找出某些数据类型的最大存储大小是多少 例如 我设置了一个快速递归算法来增加 var 大小 直到浏览器崩溃 最终在我现有的 chrome 版本上 字符串接近 128mb 或者可能是 256 我一直在
  • DynamoDb 如何查询全局二级索引?

    我创建了一个如下表 其中全局二级索引为 Em 代表电子邮件 TableName Users KeySchema AttributeName Ai KeyType HASH Partition key AttributeName Ui Key
  • 如何使用 Identity 在 ASP.NET Core 项目中禁用 HTTPS?

    我最近在 Visual Studio 2019 中创建了一个 ASP NET Core 3 0 Web 应用程序项目 启用了 Docker 但我认为这不相关 并且在包含 ASP NET Identity 时似乎无法禁用 HTTPS个人用户帐
  • 找不到目标“x86_64-apple-ios-simulator”的模块

    我有我的自定义框架 它在 XCode 10 中正常工作 我在 XCode 11 beta 3 中重建它 然后集成到应用程序中 并收到以下错误 找不到目标 x86 64 apple ios simulator 的模块 MyCustomFram
  • 生成7位随机数

    如何产生 100 万到 1000 万之间的随机数 rand 10 有效 我试过了rand 1 10 但这不起作用 取你的基数 1 000 000 并添加一个从 0 到最大起始数的随机数 1 000 000 Random rand 10 00
  • Log4Net配置日志级别

    我该如何制作Log4net http logging apache org log4net index html只记录Info级别的日志 这可能吗 只能设置一个阈值吗 这就是我所拥有的 它按照我的预期记录了信息及以上内容 我能做些什么让它只
  • 无法导入Pytorch [WinError 126]找不到指定的模块

    我正在尝试在 Windows 10 上进行 Pytorch Torchvision 的基本安装和导入 我安装了 Anaconda 并创建了一个名为 photo 的新虚拟环境 我打开 Anaconda 提示符 激活环境 然后运行 photo
  • 如何在 jQuery 中获取前一个 `` 的值?

    如何获取上级的ID td s td
  • 如何在谷歌计算引擎上打开端口

    在谷歌计算引擎上 我可以通过 localhost 访问服务器上的端口 但我无法使用来自同一服务器或外部客户端计算机的 IP 地址访问同一端口 我尝试在Web控制台页面上创建新的防火墙规则 并且可以从Linux命令中看到它 但端口8888仍然
  • 是否可以在不使用助手的情况下在车把模板中分配参数值?

    我正在尝试在模板中分配值 想法是执行以下操作 if author className classA lt trying to implement this line else className classB if div class di
  • 如何在 HTML 中嵌入流媒体视频 (rtmp)

    如何在 HTML 中嵌入流媒体视频 rtmp 链接rtmp http 42 116 119 44 4022 udp 225 1 2 244 30120 http 42 116 119 44 4022 udp 225 1 2 244 3012
  • 将 (u)int64_t 转换为 NSNumber

    所以本质上我的问题是这样的 我正在使用 uint64 t 对象作为键创建一个 NSMutableDictionary 还有比这样做更好的方法来创建它们吗 uint64 t bob 7 NSNumber bobsNumber if LP64
  • Android Studio 插件 Fabric 中出现异常

    我已经安装了最新的面料插件 https get fabric io beta对于 Android Studio 它运行良好一段时间 更新到 Android Studio 1 1 0 后 我在事件日志中看到以下内容 以及 NullPointe
  • 括号:如何使自动完成/自动缩进工作?

    括号看起来不错 但我在使用它时遇到两个问题 First 我通常这样自动完成标签 div class PRESS TAB becomes div class class div 我无法实现这一点 我尝试下载一堆插件 但没有任何作用 Secon
  • 使用 ActiveMQ/Stomp 在 PHP 和 Java 之间进行通信

    背景 我有两个服务需要通过消息队列相互通信 一种是用 PHP 编写的遗留服务 另一种是用 Java 编写的 迟早 PHP 服务将被 Java 重写 它们当前相互通信的方式是写入共享数据库 由其他服务轮询 这就是我试图摆脱并用消息队列替换的内
  • 仅限 AJAX 的 Javascript 库

    我正在寻找一个只有 AJAX 没有其他功能的 Javascript 库 例如一个小型的简单 XMLHttp 包装器 微贾克斯 http code google com p microajax 这是我决定的
  • 如何让 Material-UI 选项卡与 React-router 一起使用?

    我正在尝试让 Material UI 选项卡与路由一起使用 当路由正在工作并显示所选选项卡时 选项卡之间导航的流畅动画不再起作用 如何将 React Router 与 Material UI 选项卡一起使用 以保持选项卡动画正常工作 截至目
  • 最快重合矩阵

    我有两个数组 我想计算一个巧合列表 数组 即所有索引 i j 的列表 使得 a i b j 这是我现在的代码 b np array 3 5 6 4 a np array 1 2 3 4 np array i j for i in range
  • 如何获取每个权限的保护级别?

    我试图列出所选应用程序中每个权限的保护级别 对于下面给出的代码 但我不知道如何完成它 ArrayList