应以静态方式访问静态字段Context.ALARM_SERVICE

时间:2014-03-18 16:33:31

标签: java android eclipse sms alarmmanager

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

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);
顺便说一下,我是初学者,所以我不确定这些代码是否有助于您理解和回答。 :)

3 个答案:

答案 0 :(得分:0)

replace 
getApplicationContext().ALARM_SERVICE
with 
Context.ALARM_SERVICE

您正在尝试使用Context的实例访问Context类中的静态字段,该实例不正确&#34;。

答案 1 :(得分:0)

ALARM_SERVICE是Context的静态。 getApplicationContext()为您传递Context的实例。所以编译器试图说访问变量&#34; ALARM_SERVICE&#34;以静态的方式。

Context.ALARM_SERVICE

答案 2 :(得分:0)

正如您所见ContextWrapper类源代码:

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

        return mBase.getApplicationContext();
    }

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

getApplicationContext().getSystemService(Context.ALARM_SERVICE);
相关问题