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");
相关推荐
小碗羊肉8 小时前
【JavaWeb | 第七篇】部门管理项目实战
java·开发语言·servlet
YL200404269 小时前
027合并两个有序链表
java·数据结构·算法·链表
维诺菌9 小时前
claude code安装
java·开发语言·ai编程·calude
顶点多余9 小时前
自定义协议、序列化、反序列化实现
java·linux·开发语言·c++·tcp/ip
小新同学^O^9 小时前
简单学习 --> SpringAOP
java·学习·spring·aop
风味蘑菇干9 小时前
使用接口定义规范,实现类完成具体逻辑。
java·开发语言
Zephyr_09 小时前
java数据结构
java·数据结构
2401_833269309 小时前
Java多线程:从入门到进阶
java·开发语言
NE_STOP10 小时前
Redis--Redis分布式系统的原理与实操
java
阿巴斯甜10 小时前
必看4
android