如何随时为Android获取光线传感器值和电池电量?

问题描述:

我正在编写一个程序,我能够获取光线传感器值和当前电池电量,但只有光线值发生变化以及电池电量发生变化时。有没有办法随时获得这两个值?就像用户运行我的程序时一样,我想立即获取当前值,而不必等待它们改变。如何随时为Android获取光线传感器值和电池电量?

如果你的代码,以获得的价值,当它改变时,你可以存储在每一个变化的变量的值,并在刚更新的setter方法的变量。然后,无论何时您需要当前值,只需使用getter方法调用该变量即可。

所以,如果你的方法是这样的

private void monitorBatteryState() { 
    BroadcastReceiver battReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 

      context.unregisterReceiver(this); 
      int rawlevel = intent.getIntExtra("level", -1); 
      int scale = intent.getIntExtra("scale", -1); 
      int status = intent.getIntExtra("status", -1); 
      int health = intent.getIntExtra("health", -1); 
      int level = -1; // percentage, or -1 for unknown 
      if (rawlevel >= 0 && scale > 0) { 
       level = (rawlevel * 100)/scale; 
      } 
      setBatteryLevel(rawlevel); // setter method. 
      } 
    } 

public void setBatteryLevel(rawlevel) { 
    batteryLevel = rawlevel; 
} 

public int getBatteryLevel() { 
    return rawlevel; 
} 

你可以有一个getter方法返回currentl电池电量,rawlevel,并且可以为光传感器值做同样的。

+0

这对我不起作用,经过研究,我发现它有一些:在当前SDK中没有android.os.SystemProperties。这是源代码中仅供固件使用的类。 是否有任何其他方式获得光传感器值和电池电量而不用等待它改变? – John 2010-02-15 06:58:55

+0

我更新了我的答案,如果在给定时间没有* direct *方式返回值,那么这是一种替代方法。 – 2010-02-15 14:17:28

把这个在您的mainActivity: 这是不仅是因为我看到别人发布了有关电池电量的光传感器值。

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
Sensor mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); 
//don't know if you can put lightSensorValue here, if not try adding it as a member field 
final int lightSensorValue; 

mSensorManager.registerListener(new SensorEventListener() 
{ 
    public void onAccuracyChanged(Sensor sensor, int accuracy) 
    { 
     //do something when accuracy is changed, you probably don't need this 
    } 

    public void onSensorChanged(SensorEvent event) 
    { 
     lightSensorValue = event.values[0]; 
    } 

}, mLight, SensorManager.SENSOR_DELAY_NORMAL); 

编辑:我再次阅读你的问题,看到你想要手动随时获得它。那么,只要价值被改变,这个值就会被更新,所以你总是得到最新的信息。

您可以尝试将延迟更改为SensorManager.SENSOR_DELAY_FASTEST,并且刷新率会快很多。