如何随时为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
,并且可以为光传感器值做同样的。
答
把这个在您的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
,并且刷新率会快很多。
这对我不起作用,经过研究,我发现它有一些:在当前SDK中没有android.os.SystemProperties。这是源代码中仅供固件使用的类。 是否有任何其他方式获得光传感器值和电池电量而不用等待它改变? – John 2010-02-15 06:58:55
我更新了我的答案,如果在给定时间没有* direct *方式返回值,那么这是一种替代方法。 – 2010-02-15 14:17:28