静态变量在android broadcastreceiver中不起作用

时间:2014-07-18 09:52:46

标签: java android variables static broadcastreceiver

我正在尝试使用压力传感器。

每6秒后读取传感器值并显示。 但它总是显示“0.0”

我第一次尝试静态变量......但没有工作。 现在使用单身,仍然没有用。

我不知道我哪里错了。

帮帮我。请。

/ * broadcastReceiver * /

public class Alarm extends BroadcastReceiver {
static int count = 0;
@Override
public void onReceive(Context context, Intent intent) {   
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
    wl.acquire();

    SensorValue sv = SensorValue.getInstance();

    Toast.makeText(context, "Barometer : " + String.valueOf( sv.getBaroVal() ) +  " count : " + String.valueOf( count ), Toast.LENGTH_SHORT ).show(); // For example
    count++;

    wl.release();
}

public void SetAlarm(Context context){
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, Alarm.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10 * 60 * 10, pi); // Millisec * Second * Minute
}

public void CancelAlarm(Context context) {
    Intent intent = new Intent(context, Alarm.class);
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(sender);
}
}

/ * singleton * /

public class SensorValue {
private static SensorValue singleton = new SensorValue();
private double baroVal = 0.0;

private SensorValue(){
}

public static SensorValue getInstance(){
    return singleton;
}

public void setBaroVal( double val ) {
    baroVal = val;
}

public double getBaroVal() {
    return baroVal;
}
}

/ * MainActivity * /

@Override
public void onSensorChanged(SensorEvent event) {
    switch (event.sensor.getType()) {
    case Sensor.TYPE_PRESSURE:
        sv.setBaroVal( event.values[0] );
        break;
    }
}

谢谢!

2 个答案:

答案 0 :(得分:0)

将您的SensorValue类更改为以下。

          public class SensorValue {
          private static SensorValue singleton;
          private double baroVal = 0.0;

          private SensorValue(){
           singleton = new SensorValue();
          }

          public static SensorValue getInstance(){
           if(singleton == null)
           {
               singleton = new SensorValue();
           }

           return singleton 
       } 

       public void setBaroVal( double val ) {
           baroVal = val;
       }

       public double getBaroVal() {
         return baroVal;
      }
   }

我不知道它是否会起作用,尽管只测试一次。

答案 1 :(得分:0)

最后,我找到了一个理由。

清单文件中的

。我设置了像这样的接收器选项

android:process=":remote"

它有另一个过程。

祝你有个美好的一天。