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");
相关推荐
aaPIXa6228 小时前
C++模板元编程:编译期计算Fibonacci数列
java·开发语言·c++
SunnyDays10119 小时前
Java 编辑 PDF:从增删改查到加密保护
java·修改 pdf·编辑 pdf
球king9 小时前
CC GUI 插件:在 IDEA 中使用 CodeX
java·ide·intellij-idea
apihz9 小时前
台风实时与历史详情查询免费 API 接口完整教程
android·开发语言·tcp/ip·dubbo·台风·天气预报
豆瓣鸡9 小时前
网关、服务 userId 透传
java·微服务·gateway
bksczm9 小时前
Linux之信号量(POSIX标准)
java·开发语言
Devin~Y10 小时前
电商场景下的Java面试实战:从Spring Boot微服务到Kafka、Redis与AI RAG
java·spring boot·redis·elasticsearch·spring cloud·微服务·kafka
吠品10 小时前
PHP里取月份最后一天的几种方式
java·开发语言·eureka
张某布响丸辣10 小时前
告别本地环境灾难:Java 后端实战 Sealos DevBox,一套云端开发到上线完整闭环
java·开发语言·sealos·devbox
浪客川10 小时前
AOSP源码隐藏状态栏
android·aosp