You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:36:04