如何降低光传感器的监听速率?

huangapple 未分类评论42阅读模式
英文:

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
            }
        }

    };

huangapple
  • 本文由 发表于 2020年7月25日 03:01:33
  • 转载请务必保留本文链接:https://java.coder-hub.com/63079951.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定