如何获得Android的光传感器值和电池电量?

时间:2010-02-15 03:23:09

标签: android battery sensor

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

2 个答案:

答案 0 :(得分:2)

如果您有代码在更改时接收值,则可以将值存储在变量中,并且在每次更改时,只需使用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方法返回当前的电池电量rawlevel,并且您可以对光传感器值执行相同操作。

答案 1 :(得分:0)

把它放在你的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,刷新率会快很多。

相关问题