Android 开发,getSystemService 警告信息:Must be one of: Context. POWER_SERVICE ...

复制代码
Object statusBarService = context.getSystemService(Context.STATUS_BAR_SERVICE);
  • 在 Android 开发中,上述代码出现如下警告信息

    Must be one of:
    Context. POWER_SERVICE,
    Context. WINDOW_SERVICE,
    Context. LAYOUT_INFLATER_SERVICE,
    Context. ACCOUNT_SERVICE,
    Context. ACTIVITY_SERVICE,
    Context. ALARM_SERVICE,
    Context. NOTIFICATION_SERVICE,
    Context. ACCESSIBILITY_SERVICE,
    Context. CAPTIONING_SERVICE,
    Context. KEYGUARD_SERVICE,
    Context. LOCATION_SERVICE,
    android. content. Context. HEALTHCONNECT_SERVICE,
    Context. SEARCH_SERVICE,
    Context. SENSOR_SERVICE,
    Context. STORAGE_SERVICE,
    Context. STORAGE_STATS_SERVICE,
    Context. WALLPAPER_SERVICE,
    Context. VIBRATOR_MANAGER_SERVICE,
    Context. VIBRATOR_SERVICE,
    Context. CONNECTIVITY_SERVICE,
    Context. IPSEC_SERVICE,
    Context. VPN_MANAGEMENT_SERVICE,
    Context. NETWORK_STATS_SERVICE,
    Context. WIFI_SERVICE,
    Context. WIFI_AWARE_SERVICE,
    Context. WIFI_P2P_SERVICE,
    Context. WIFI_RTT_RANGING_SERVICE,
    Context. NSD_SERVICE,
    Context. AUDIO_SERVICE,
    Context. FINGERPRINT_SERVICE,
    Context. BIOMETRIC_SERVICE,
    Context. MEDIA_ROUTER_SERVICE,
    Context. TELEPHONY_SERVICE,
    Context. TELEPHONY_SUBSCRIPTION_SERVICE,
    Context. CARRIER_CONFIG_SERVI...

问题原因
  1. 代码尝试获取 STATUS_BAR_SERVICE 系统服务,但系统提示该服务不在允许的列表中

  2. 错误信息列出了所有合法的 Context.getSystemService 方法可用的服务名称

  3. STATUS_BAR_SERVICE 是隐藏的系统服务,Context.getSystemService 方法仅支持公开的、文档化的系统服务

  4. 可以反射调用 STATUS_BAR_SERVICE 系统服务,但是不推荐

处理策略
  • 可以使用 @SuppressLint 注解抑制警告
java 复制代码
@SuppressLint("WrongConstant")
Object statusBarService = context.getSystemService(Context.STATUS_BAR_SERVICE);
  • 但是,这个时候又会出现如下警告信息,STATUS_BAR_SERVICE 是 Android 13(API 33)才引入的常量,而这里的 minSdkVersion 是 24

    Field requires API level 33 (current min is 24): android. content. Context#STATUS_BAR_SERVICE

  • 可以使用字符串代替常量,Context.getSystemService 方法允许传入字符串参数,可以绕过 API 33 的限制

java 复制代码
@SuppressLint("WrongConstant")
Object statusBarService = context.getSystemService("statusbar");
相关推荐
Cc.Y1 小时前
Java零基础入门:字符串深度掌握——从基础API到StringBuilder性能优化
java·开发语言·性能优化
shuoshuohaohao6 小时前
MyBatis 小知识点
java·spring·mybatis
海上小飞龙6 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
谢亮_vipxieliang7 小时前
泛型擦除、通配符与 PECS 一次讲透
java·面试
八解毒剂7 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
打工仔折腾 AI8 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
ZealSinger8 小时前
Java虚拟线程上线后瓶颈转移到哪看三层
java·开发语言·firefox
2601_961133288 小时前
盘立方软件指标文华期货公式下载
java
蜗牛互联网8 小时前
长任务多Agent共享文件系统的Manifest交接模式
java·人工智能·后端