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");
相关推荐
yxlalm2 小时前
Spring AI+RAG 01-项目背景与技术选型
java·人工智能·spring
程序员清风3 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
Seoyoneh3 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
海南java第二人3 小时前
对外 API 如何保证幂等性?插入数据 / 上传表格场景全方案汇总
java·幂等性
tryxr4 小时前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务
Tangyuewei4 小时前
Java 写 Agent:模型只是组件
java·开发语言
tianshi48514 小时前
Android 应用启动窗口(Splash Screen)的创建与销毁流程
android
脚踏实地,坚持不懈!4 小时前
ICU Calendar 实际工作问题排查手册
android
ii_best4 小时前
安卓脚本/ios开发软件按键精灵实战:自动定位弹窗广告关闭按钮坐标的通用方案
android·ios·自动化
彧azz5 小时前
Java学习语法篇:变量
java·学习