英文:
How to slow the rate at which light sensor listens?
问题
我想限制光传感器检测光线的频率,以节省电池电量和CPU使用率。
在阅读了SO并尝试自己操作后,我发现更改registerListener
方法的参数没有效果。
所以下一步我猜想是每次传感器检测到光线时让它休眠或等待?我尝试将wait(2000);
放在其中,但会导致错误。
以下是光传感器代码:
SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor light = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
// 这里是我想要处理的地方
}
};
sm.registerListener(listener, light, SensorManager.SENSOR_DELAY_NORMAL);
英文:
I want to limit the frequency at which light sensor detects light, to save battery power and CPU usage.
After reading SO as well as trying it myself, I've found that changing the parameters of the registerListener
method does nothing.
So next bet I guess is to make it sleep or wait every time the sensor senses light? How would I do that? I tried just putting wait(2000);
inside it but that gives an error.
Here's the light sensor code:
SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor light = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
//Here is where I want to do my stuff
}
};
sm.registerListener(listener, light, SensorManager.SENSOR_DELAY_NORMAL);
答案1
得分: 0
在最小间隔内执行您的操作:
private final long minimumInterval = 100;
private long lastRefresh;
SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
long timeMillis = System.currentTimeMillis();
if (lastRefresh - timeMillis > minimumInterval) {
lastRefresh = timeMillis;
//进行操作
}
}
};
英文:
Do your stuff at minimum interval:
private final long minimumInterval = 100;
private long lastRefresh;
SensorEventListener listener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
long timeMillis = System.currentTimeMillis();
if (lastRefresh - timeMillis > minimumInterval) {
lastRefresh = timeMillis;
//do stuff
}
}
};
专注分享java语言的经验与见解,让所有开发者获益!
评论