OnSensorChanged()不会更改循环中的值

时间:2016-12-13 19:10:10

标签: java android sensor

我试图在1秒内获得100个加速度计读数,但不是100个不同的读数,它给了我100次相同的读数。

当我在我的应用程序中按下按钮时,我正试图显示这100个加速度计读数

我的MainActivity有一个名为

的变量
float ax;

是连续存储加速度计读数(x轴)的地方。

我的OnCreate()方法中有这个按钮代码

 button = (Button)findViewById(R.id.startbutton); //inits button
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {               
            BuildTable();
        }
    });

触发BuildTable()函数(显示应用程序本身的输出)

我的BuildTable()有这样的东西

 public void BuildTable()
{       

    TableRow trow = new TableRow(this);
    TextView text = new TextView(this);       

    int count = 0;

    while (count < 100)
    {

        if(System.currentTimeMillis() - lasttime >= 10)
        {

            lasttime = System.currentTimeMillis();              
            text = new TextView(this);
            Log.d("MyApp","ax is: "+ax);
            text.setText(""+ax);
            trow = new TableRow(this);
            trow.addView(text);
            table.addView(trow,count);
            count++;

        }

    }
}

和OnSensorChanged()函数看起来像这样

@Override
public void onSensorChanged(SensorEvent event) {     
    ax = event.values[0];      

}

只是更新了斧头。

按钮点击如何暂停更新ax?我该如何解决这个问题?

干杯

2 个答案:

答案 0 :(得分:0)

尝试使用

过滤onSensorChanged函数中的结果
@Override
public void onSensorChanged(SensorEvent event)
{    
   if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
   { 
       ax = event.values[0];      
   }
}

答案 1 :(得分:0)

我找到了一种绕过循环冻结onSensorChanged()的方法!

我基本上必须在runnables和&#39; flag&#39;的帮助下实现多线程。变量(注意&#39;标志&#39;变量必须静态)。

我将BuildTable()函数放在一个新的Runnable中,然后将其插入到一个线程中。所以有一个主线程(我想用于GUI)和一个单独的线程,必须将其修改为专门接收和存储传感器读数。

然后在主线程中执行这些变量的实际显示(我认为它被称为UIThread),并借助于&#39;标记&#39;我的BuildTable()线程也修改了变量(因此&#39;标志&#39;变量必须是静态)。

我可以添加代码片段以获得更多提示,但也许稍晚或当有人要求时,它有点早上

干杯!