首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android上的接近感应器提供数据的次数太多

android上的接近感应器提供数据的次数太多
EN

Stack Overflow用户
提问于 2021-04-12 04:31:22
回答 1查看 30关注 0票数 1

我正在Android上创建一个简单的应用程序,我正在阅读有关传感器的文章。现在,我正在使用一个接近传感器来显示一个简单的吐司。当我在手机上方挥手时,传感器应该会显示一个带有我给出的简单信息的吐司。是的,它确实是这样做的,但是它显示了太多次的吐司。

这是我使用的代码:

代码语言:javascript
复制
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
            if(event.values[0] == 0) {
                Toast.makeText(appCompatActivity.getApplicationContext(), "near", Toast.LENGTH_SHORT).show();
            } 
        }
    }

为了获得SensorManager:

代码语言:javascript
复制
      SensorManager sensorManager = (SensorManager) appCompatActivity.getSystemService(Context.SENSOR_SERVICE);
      Sensor proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
      sensorManager.registerListener(this, proximitySensor, SensorManager.SENSOR_DELAY_FASTEST);

该参数SensorManager.SENSOR_DELAY_FASTEST是从SENSOR_DELAY_NORMAL更改的,但速度是相同的。我感觉后面发生了某种缓冲,但我无法做到这一点。我希望在悬停手的时候,吐司只出现一次,直到我再次悬停。

EN

回答 1

Stack Overflow用户

发布于 2021-04-12 04:35:49

尝试设置一个名为hasDisplayedToast的布尔值,并在操作完成后将其设置为true。这将使它只发生一次。如果您希望该操作持续发生,您可以设置一个计时器,并在一段时间后将bool设置为false。我对那门语言不是很熟悉,但它看起来和C++很相似

代码语言:javascript
复制
 bool hasDisplayedToast = false;
 public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
            if(event.values[0] == 0 && !hasDisplayedToast) {
                Toast.makeText(appCompatActivity.getApplicationContext(), "near", Toast.LENGTH_SHORT).show();
                hasDisplayedToast = true;
            } 
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67049938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档