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");
相关推荐
豆瓣鸡6 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖6 小时前
Java深入解析篇九之NIO详解
java·网络·nio
summerkissyou19876 小时前
Android 16 架构图
android
The Chosen One9856 小时前
高进度算法模板速记(待完善)
java·前端·算法
神龙天舞20017 小时前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql
海天鹰7 小时前
Android Studio Quail3 | 2026.1.3 升级后 Gradle 报错
android studio
极光代码工作室9 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
Leighteen9 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
名字还没想好☜10 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
码农coding10 小时前
android12 systemUI 之锁屏
android