Java中如何通过变量存储的常量名获取android.Manifest.permission对应值
解决方法
错误原因
getFields()是无参方法,作用是返回类中所有 public 字段组成的数组,不支持传入字符串参数查询指定字段,因此你调用时传入字符串会触发编译报错。
正确实现代码
你需要使用 Class.getField(String name) 方法获取指定名称的字段,再读取静态字段的值即可,实现效果和直接调用静态常量完全一致:
try { String permissionName = "READ_PHONE_STATE"; // 获取指定名称的public字段 Field permissionField = Manifest.permission.class.getField(permissionName); // 静态字段取值时传入null作为实例参数即可 String result = (String) permissionField.get(null); // 此时result的值等于Manifest.permission.READ_PHONE_STATE的返回值 } catch (NoSuchFieldException e) { // 不存在对应名称的权限常量时的异常处理 e.printStackTrace(); } catch (IllegalAccessException e) { // 字段无访问权限时的异常处理 e.printStackTrace(); }
注意事项
- 如果项目开启了代码混淆,需要在混淆规则中添加
-keep class android.Manifest$permission { *; },避免权限类的常量被混淆后找不到对应字段。 - 建议做好异常兜底逻辑,避免传入不存在的权限名称时触发崩溃。
内容的提问来源于stack exchange,提问作者UWU gg
相关产品推荐
相关产品推荐

