【问题标题】:The static field Context.ALARM_SERVICE should be accessed in a static way静态字段 Context.ALARM_SERVICE 应该以静态方式访问
【发布时间】:2014-03-18 16:33:31
【问题描述】:

此应用正在运行。但我不明白为什么我会收到那个警告。我希望你能提供一个解决方案。谢谢!

java代码:

     /*final int*/ mId = (int) System.currentTimeMillis();
     i.putExtra("com.somitsolutions.android.smsscheduler.id", mId);
    AlarmManager am = (AlarmManager)      
    getApplicationContext().getSystemService(getApplicationContext().ALARM_SERVICE);  <<-- this is where i get the warning
    PendingIntent pi = PendingIntent.getService(getApplicationContext(), mId, i, PendingIntent.FLAG_UPDATE_CURRENT);

顺便说一句,我是初学者,所以我不确定这些代码是否能帮助您理解和回答。 :)

【问题讨论】:

  • @SuperUser 我不确定“忘记警告”是否是一个好消息。当然,很多时候它们可以被忽略,但知道你为什么会得到它们以及需要担心哪些仍然是件好事。
  • @SuperUser - 如果他这样做,他将来会遇到麻烦。
  • @codeMagic 很抱歉,但大多数时候警告并不重要。

标签: java android eclipse sms alarmmanager


【解决方案1】:
replace 
getApplicationContext().ALARM_SERVICE
with 
Context.ALARM_SERVICE

您正在尝试使用不正确的 Context 实例访问 Context 类中存在的静态字段。

【讨论】:

  • 我完全按照你说的做了,但我仍然收到同样的信息。
【解决方案2】:

ALARM_SERVICE 是 Context 的一个静态变量。 getApplicationContext() 传递给你一个 Context 的实例。所以编译器试图以静态方式访问变量“ALARM_SERVICE”。

Context.ALARM_SERVICE

【讨论】:

    【解决方案3】:

    如你所见ContextWrapper类源码:

      ....
      Context mBase;
      ....
        @Override
         public Context getApplicationContext() {
    
            return mBase.getApplicationContext();
        }
    

    表示getApplicationContext() 方法返回一个Context 类的实例。在您的情况下,您正在以 getApplicationContext().ALARM_SERVICE 的身份访问 ALARM_SERVICE 属性,这意味着使用实例访问静态属性,因此警告建议您无需使用实例来访问类的静态属性。你可以使用类名:

    getApplicationContext().getSystemService(Context.ALARM_SERVICE);
    

    【讨论】:

    • Adt 提出了同样的建议。我不明白为什么我仍然得到它。
    猜你喜欢
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多