用于记录传感器数据的Android按钮

时间:2017-05-11 11:01:30

标签: java android sensor

我是Android平台的初学者。我编写了下面粘贴的代码,用于通过单击按钮记录磁传感器中的数据。但是当我点击按钮(按钮ID - btnRecord )时,它只记录数秒,我必须再次点击以记录更多。如何通过第一次点击连续开始记录数据?先感谢您。

@Override
public void onSensorChanged(SensorEvent event) {
    Sensor sensor = event.sensor;
    a= event.values[0];
    b=event.values[1];
    c=event.values[2];

    if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        magnetismx.setText(Float.toString(event.values[0]));
        magnetismy.setText(Float.toString(event.values[1]));
        magnetismz.setText(Float.toString(event.values[2]));
        Button button2 = (Button) findViewById(R.id.btnRecord);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getBaseContext(), "Data Recording Started" , Toast.LENGTH_SHORT ).show();
                try {
                    writeToCsv(Float.toString(a), Float.toString(b), Float.toString(c));
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}

2 个答案:

答案 0 :(得分:2)

写入文件的代码在onClick()中 这只在你点击按钮时执行,它执行一次。

将调用onSensorChanged(),但onClick()将不会再次执行。

你需要制作一个标志(布尔值)来告诉你何时存储在文件中, 此标志在onClick()

处更改

前,

boolean recording = false;

Button button2 = (Button) findViewById(R.id.btnRecord);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
        recording = true;
        Toast.makeText(getBaseContext(), "Data Recording Started" , Toast.LENGTH_SHORT ).show();
    }
});

@Override
public void onSensorChanged(SensorEvent event) {

    Sensor sensor = event.sensor;
    a= event.values[0];
    b=event.values[1];
    c=event.values[2];
    if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {

        magnetismx.setText(Float.toString(event.values[0]));
        magnetismy.setText(Float.toString(event.values[1]));
        magnetismz.setText(Float.toString(event.values[2]));

        if(!recording){
            return;
        }

        try {
            writeToCsv(Float.toString(a), Float.toString(b), Float.toString(c));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

使按钮充当开关(开,关)更改此

recording = true;

到这个

recording = !recording ;

将反转布尔值的当前值。 这样一次点击就会开始记录,下一次点击就会停止记录。

答案 1 :(得分:0)

从回调Button中删除onSensorChanged。你不需要那里。例如,在Button方法中将onCreate()定义在其他地方,例如

onCreate()
Button button2 = (Button) findViewById(R.id.btnRecord);
button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   flip = !flip;
            });

布尔字段flip用于控制onSensorChanged回调的写入行为。因此,在您的类中定义一个私有字段flip并像这样使用它

 @Override
    public void onSensorChanged(SensorEvent event) {
        Sensor sensor = event.sensor;
        a= event.values[0];
        b=event.values[1];
        c=event.values[2];
        if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {

        magnetismx.setText(Float.toString(event.values[0]));
        magnetismy.setText(Float.toString(event.values[1]));
        magnetismz.setText(Float.toString(event.values[2]));
        if(flip) writeToCsv(Float.toString(a), Float.toString(b), Float.toString(c));
    }
}